@oxyhq/services 0.1.18 → 5.1.8

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 (197) hide show
  1. package/README.md +17 -138
  2. package/UI_COMPONENTS.md +143 -0
  3. package/lib/commonjs/assets/OxyLogo.svg +1 -0
  4. package/lib/commonjs/assets/assets/OxyLogo.svg +1 -0
  5. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  6. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  7. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  8. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  9. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  10. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  11. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  12. package/lib/commonjs/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  13. package/lib/commonjs/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  14. package/lib/commonjs/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  15. package/lib/commonjs/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  16. package/lib/commonjs/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  17. package/lib/commonjs/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  18. package/lib/commonjs/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  19. package/lib/commonjs/core/index.js +783 -0
  20. package/lib/commonjs/core/index.js.map +1 -0
  21. package/lib/commonjs/index.js +137 -0
  22. package/lib/commonjs/index.js.map +1 -0
  23. package/lib/commonjs/models/interfaces.js +2 -0
  24. package/lib/commonjs/models/interfaces.js.map +1 -0
  25. package/lib/commonjs/package.json +1 -0
  26. package/lib/commonjs/ui/components/Avatar.js +98 -0
  27. package/lib/commonjs/ui/components/Avatar.js.map +1 -0
  28. package/lib/commonjs/ui/components/FontLoader.js +181 -0
  29. package/lib/commonjs/ui/components/FontLoader.js.map +1 -0
  30. package/lib/commonjs/ui/components/OxyLogo.js +56 -0
  31. package/lib/commonjs/ui/components/OxyLogo.js.map +1 -0
  32. package/lib/commonjs/ui/components/OxyProvider.js +464 -0
  33. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -0
  34. package/lib/commonjs/ui/components/OxySignInButton.js +178 -0
  35. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -0
  36. package/lib/commonjs/ui/components/bottomSheet/index.js +37 -0
  37. package/lib/commonjs/ui/components/bottomSheet/index.js.map +1 -0
  38. package/lib/commonjs/ui/context/OxyContext.js +296 -0
  39. package/lib/commonjs/ui/context/OxyContext.js.map +1 -0
  40. package/lib/commonjs/ui/index.js +144 -0
  41. package/lib/commonjs/ui/index.js.map +1 -0
  42. package/lib/commonjs/ui/navigation/OxyRouter.js +145 -0
  43. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -0
  44. package/lib/commonjs/ui/navigation/types.js +6 -0
  45. package/lib/commonjs/ui/navigation/types.js.map +1 -0
  46. package/lib/commonjs/ui/screens/AboutKarmaScreen.js +45 -0
  47. package/lib/commonjs/ui/screens/AboutKarmaScreen.js.map +1 -0
  48. package/lib/commonjs/ui/screens/AccountCenterScreen.js +280 -0
  49. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -0
  50. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +566 -0
  51. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -0
  52. package/lib/commonjs/ui/screens/SignInScreen.js +230 -0
  53. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -0
  54. package/lib/commonjs/ui/screens/SignUpScreen.js +673 -0
  55. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -0
  56. package/lib/commonjs/ui/styles/FONTS.md +126 -0
  57. package/lib/commonjs/ui/styles/fonts.js +84 -0
  58. package/lib/commonjs/ui/styles/fonts.js.map +1 -0
  59. package/lib/commonjs/ui/styles/index.js +28 -0
  60. package/lib/commonjs/ui/styles/index.js.map +1 -0
  61. package/lib/commonjs/ui/styles/theme.js +122 -0
  62. package/lib/commonjs/ui/styles/theme.js.map +1 -0
  63. package/lib/module/assets/OxyLogo.svg +1 -0
  64. package/lib/module/assets/assets/OxyLogo.svg +1 -0
  65. package/lib/module/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  66. package/lib/module/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  67. package/lib/module/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  68. package/lib/module/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  69. package/lib/module/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  70. package/lib/module/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  71. package/lib/module/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  72. package/lib/module/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  73. package/lib/module/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  74. package/lib/module/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  75. package/lib/module/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  76. package/lib/module/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  77. package/lib/module/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  78. package/lib/module/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  79. package/lib/module/core/index.js +777 -0
  80. package/lib/module/core/index.js.map +1 -0
  81. package/lib/module/index.js +40 -0
  82. package/lib/module/index.js.map +1 -0
  83. package/lib/module/models/interfaces.js +2 -0
  84. package/lib/module/models/interfaces.js.map +1 -0
  85. package/lib/module/package.json +1 -0
  86. package/lib/module/ui/components/Avatar.js +93 -0
  87. package/lib/module/ui/components/Avatar.js.map +1 -0
  88. package/lib/module/ui/components/FontLoader.js +176 -0
  89. package/lib/module/ui/components/FontLoader.js.map +1 -0
  90. package/lib/module/ui/components/OxyLogo.js +49 -0
  91. package/lib/module/ui/components/OxyLogo.js.map +1 -0
  92. package/lib/module/ui/components/OxyProvider.js +458 -0
  93. package/lib/module/ui/components/OxyProvider.js.map +1 -0
  94. package/lib/module/ui/components/OxySignInButton.js +172 -0
  95. package/lib/module/ui/components/OxySignInButton.js.map +1 -0
  96. package/lib/module/ui/components/bottomSheet/index.js +8 -0
  97. package/lib/module/ui/components/bottomSheet/index.js.map +1 -0
  98. package/lib/module/ui/context/OxyContext.js +291 -0
  99. package/lib/module/ui/context/OxyContext.js.map +1 -0
  100. package/lib/module/ui/index.js +26 -0
  101. package/lib/module/ui/index.js.map +1 -0
  102. package/lib/module/ui/navigation/OxyRouter.js +138 -0
  103. package/lib/module/ui/navigation/OxyRouter.js.map +1 -0
  104. package/lib/module/ui/navigation/types.js +4 -0
  105. package/lib/module/ui/navigation/types.js.map +1 -0
  106. package/lib/module/ui/screens/AboutKarmaScreen.js +40 -0
  107. package/lib/module/ui/screens/AboutKarmaScreen.js.map +1 -0
  108. package/lib/module/ui/screens/AccountCenterScreen.js +275 -0
  109. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -0
  110. package/lib/module/ui/screens/AccountOverviewScreen.js +560 -0
  111. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -0
  112. package/lib/module/ui/screens/SignInScreen.js +224 -0
  113. package/lib/module/ui/screens/SignInScreen.js.map +1 -0
  114. package/lib/module/ui/screens/SignUpScreen.js +668 -0
  115. package/lib/module/ui/screens/SignUpScreen.js.map +1 -0
  116. package/lib/module/ui/styles/FONTS.md +126 -0
  117. package/lib/module/ui/styles/fonts.js +81 -0
  118. package/lib/module/ui/styles/fonts.js.map +1 -0
  119. package/lib/module/ui/styles/index.js +5 -0
  120. package/lib/module/ui/styles/index.js.map +1 -0
  121. package/lib/module/ui/styles/theme.js +115 -0
  122. package/lib/module/ui/styles/theme.js.map +1 -0
  123. package/lib/typescript/core/index.d.ts +304 -0
  124. package/lib/typescript/core/index.d.ts.map +1 -0
  125. package/lib/typescript/index.d.ts +14 -0
  126. package/lib/typescript/index.d.ts.map +1 -0
  127. package/lib/typescript/models/interfaces.d.ts +98 -0
  128. package/lib/typescript/models/interfaces.d.ts.map +1 -0
  129. package/lib/typescript/ui/components/Avatar.d.ts +62 -0
  130. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -0
  131. package/lib/typescript/ui/components/FontLoader.d.ts +15 -0
  132. package/lib/typescript/ui/components/FontLoader.d.ts.map +1 -0
  133. package/lib/typescript/ui/components/OxyLogo.d.ts +29 -0
  134. package/lib/typescript/ui/components/OxyLogo.d.ts.map +1 -0
  135. package/lib/typescript/ui/components/OxyProvider.d.ts +12 -0
  136. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -0
  137. package/lib/typescript/ui/components/OxySignInButton.d.ts +65 -0
  138. package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -0
  139. package/lib/typescript/ui/components/bottomSheet/index.d.ts +3 -0
  140. package/lib/typescript/ui/components/bottomSheet/index.d.ts.map +1 -0
  141. package/lib/typescript/ui/context/OxyContext.d.ts +26 -0
  142. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -0
  143. package/lib/typescript/ui/index.d.ts +16 -0
  144. package/lib/typescript/ui/index.d.ts.map +1 -0
  145. package/lib/typescript/ui/navigation/OxyRouter.d.ts +5 -0
  146. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -0
  147. package/lib/typescript/ui/navigation/types.d.ts +107 -0
  148. package/lib/typescript/ui/navigation/types.d.ts.map +1 -0
  149. package/lib/typescript/ui/screens/AboutKarmaScreen.d.ts +5 -0
  150. package/lib/typescript/ui/screens/AboutKarmaScreen.d.ts.map +1 -0
  151. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts +5 -0
  152. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -0
  153. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +5 -0
  154. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -0
  155. package/lib/typescript/ui/screens/SignInScreen.d.ts +5 -0
  156. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -0
  157. package/lib/typescript/ui/screens/SignUpScreen.d.ts +5 -0
  158. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -0
  159. package/lib/typescript/ui/styles/fonts.d.ts +21 -0
  160. package/lib/typescript/ui/styles/fonts.d.ts.map +1 -0
  161. package/lib/typescript/ui/styles/index.d.ts +3 -0
  162. package/lib/typescript/ui/styles/index.d.ts.map +1 -0
  163. package/lib/typescript/ui/styles/theme.d.ts +69 -0
  164. package/lib/typescript/ui/styles/theme.d.ts.map +1 -0
  165. package/package.json +95 -51
  166. package/src/assets/OxyLogo.svg +1 -0
  167. package/src/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  168. package/src/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  169. package/src/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  170. package/src/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  171. package/src/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  172. package/src/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  173. package/src/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  174. package/src/core/index.ts +768 -0
  175. package/src/index.ts +57 -0
  176. package/src/models/interfaces.ts +128 -0
  177. package/src/ui/components/Avatar.tsx +155 -0
  178. package/src/ui/components/FontLoader.tsx +180 -0
  179. package/src/ui/components/OxyLogo.tsx +73 -0
  180. package/src/ui/components/OxyProvider.tsx +490 -0
  181. package/src/ui/components/OxySignInButton.tsx +207 -0
  182. package/src/ui/components/bottomSheet/index.tsx +12 -0
  183. package/src/ui/context/OxyContext.tsx +344 -0
  184. package/src/ui/index.ts +28 -0
  185. package/src/ui/navigation/OxyRouter.tsx +142 -0
  186. package/src/ui/navigation/types.ts +124 -0
  187. package/src/ui/screens/AboutKarmaScreen.tsx +52 -0
  188. package/src/ui/screens/AccountCenterScreen.tsx +240 -0
  189. package/src/ui/screens/AccountOverviewScreen.tsx +512 -0
  190. package/src/ui/screens/SignInScreen.tsx +210 -0
  191. package/src/ui/screens/SignUpScreen.tsx +607 -0
  192. package/src/ui/styles/FONTS.md +126 -0
  193. package/src/ui/styles/fonts.ts +77 -0
  194. package/src/ui/styles/index.ts +2 -0
  195. package/src/ui/styles/theme.ts +142 -0
  196. package/dist/index.d.ts +0 -152
  197. package/dist/index.js +0 -1
@@ -0,0 +1,512 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ TouchableOpacity,
6
+ StyleSheet,
7
+ ActivityIndicator,
8
+ ScrollView,
9
+ Alert,
10
+ Platform,
11
+ Image,
12
+ TextStyle,
13
+ } from 'react-native';
14
+ import { BaseScreenProps } from '../navigation/types';
15
+ import { useOxy } from '../context/OxyContext';
16
+ import OxyLogo from '../components/OxyLogo';
17
+ import Avatar from '../components/Avatar';
18
+ import { fontFamilies } from '../styles/fonts';
19
+
20
+ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
21
+ onClose,
22
+ theme,
23
+ }) => {
24
+ const { user, logout, isLoading } = useOxy();
25
+ const [showMoreAccounts, setShowMoreAccounts] = useState(false);
26
+
27
+ const isDarkTheme = theme === 'dark';
28
+ const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
29
+ const backgroundColor = isDarkTheme ? '#121212' : '#FFFFFF';
30
+ const secondaryBackgroundColor = isDarkTheme ? '#222222' : '#F5F5F5';
31
+ const borderColor = isDarkTheme ? '#444444' : '#E0E0E0';
32
+ const primaryColor = '#d169e5';
33
+ const dangerColor = '#D32F2F';
34
+ const iconColor = isDarkTheme ? '#BBBBBB' : '#666666';
35
+
36
+ // Mock additional accounts (for demo purposes)
37
+ const additionalAccounts = [
38
+ {
39
+ id: '2',
40
+ username: 'Albert Isern Alvarez',
41
+ email: 'albert.isern.alvarez@gmail.com',
42
+ avatarUrl: 'https://example.com/avatar2.jpg',
43
+ }
44
+ ];
45
+
46
+ // Feature settings (with mock values)
47
+ const features = {
48
+ safeSearch: false,
49
+ language: 'English',
50
+ };
51
+
52
+ const handleLogout = async () => {
53
+ try {
54
+ await logout();
55
+ if (onClose) {
56
+ onClose();
57
+ }
58
+ } catch (error) {
59
+ console.error('Logout failed:', error);
60
+ Alert.alert('Logout Failed', 'There was a problem signing you out. Please try again.');
61
+ }
62
+ };
63
+
64
+ const confirmLogout = () => {
65
+ Alert.alert(
66
+ 'Sign Out',
67
+ 'Are you sure you want to sign out?',
68
+ [
69
+ {
70
+ text: 'Cancel',
71
+ style: 'cancel',
72
+ },
73
+ {
74
+ text: 'Sign Out',
75
+ onPress: handleLogout,
76
+ style: 'destructive',
77
+ },
78
+ ],
79
+ { cancelable: true }
80
+ );
81
+ };
82
+
83
+ const handleAddAccount = () => {
84
+ Alert.alert('Add Account', 'Add another account feature coming soon!');
85
+ };
86
+
87
+ const handleSignOutAll = () => {
88
+ Alert.alert(
89
+ 'Sign Out of All Accounts',
90
+ 'Are you sure you want to sign out of all accounts?',
91
+ [
92
+ {
93
+ text: 'Cancel',
94
+ style: 'cancel',
95
+ },
96
+ {
97
+ text: 'Sign Out All',
98
+ onPress: handleLogout,
99
+ style: 'destructive',
100
+ },
101
+ ],
102
+ { cancelable: true }
103
+ );
104
+ };
105
+
106
+ const renderFeatureItem = (
107
+ icon: React.ReactNode,
108
+ title: string,
109
+ value: string | null | undefined,
110
+ onPress: () => void
111
+ ) => (
112
+ <TouchableOpacity
113
+ style={[styles.featureItem, { borderColor }]}
114
+ onPress={onPress}
115
+ >
116
+ <View style={styles.featureItemLeft}>
117
+ <View style={styles.iconContainer}>
118
+ {icon}
119
+ </View>
120
+ <Text style={[styles.featureItemTitle, { color: textColor }]}>{title}</Text>
121
+ </View>
122
+ {value !== undefined && (
123
+ <Text style={[styles.featureItemValue, { color: iconColor }]}>{value}</Text>
124
+ )}
125
+ </TouchableOpacity>
126
+ );
127
+
128
+ if (!user) {
129
+ return (
130
+ <View style={[styles.container, { backgroundColor }]}>
131
+ <Text style={[styles.message, { color: textColor }]}>Not signed in</Text>
132
+ </View>
133
+ );
134
+ }
135
+
136
+ if (isLoading) {
137
+ return (
138
+ <View style={[styles.container, { backgroundColor, justifyContent: 'center' }]}>
139
+ <ActivityIndicator size="large" color={primaryColor} />
140
+ </View>
141
+ );
142
+ }
143
+
144
+ return (
145
+ <View style={[styles.container, { backgroundColor }]}>
146
+ <ScrollView style={styles.scrollView} contentContainerStyle={styles.scrollContainer}>
147
+ <View style={styles.header}>
148
+ <Text style={[styles.accountEmail, { color: textColor }]}>
149
+ {user.email || user.username}
150
+ </Text>
151
+ <TouchableOpacity style={styles.closeIcon} onPress={onClose}>
152
+ <Text style={{ fontSize: 24, color: textColor }}>×</Text>
153
+ </TouchableOpacity>
154
+ </View>
155
+
156
+ <View style={[styles.profileContainer, { backgroundColor: secondaryBackgroundColor }]}>
157
+ <View style={styles.avatarContainer}>
158
+ <Avatar
159
+ imageUrl={user.avatarUrl}
160
+ name={user.username}
161
+ size={70}
162
+ theme={theme}
163
+ />
164
+ </View>
165
+ <Text style={[styles.greeting, { color: textColor }]}>Hi, {user.username.split(' ')[0]}!</Text>
166
+
167
+ <TouchableOpacity
168
+ style={[styles.manageAccountButton, { borderColor }]}
169
+ onPress={() => Alert.alert('Account', 'Manage your Oxy Account feature coming soon!')}
170
+ >
171
+ <Text style={[styles.manageAccountText, { color: textColor }]}>
172
+ Manage your Oxy Account
173
+ </Text>
174
+ </TouchableOpacity>
175
+ </View>
176
+
177
+ {/* Multiple accounts section */}
178
+ <TouchableOpacity
179
+ style={[styles.sectionHeader, { borderColor }]}
180
+ onPress={() => setShowMoreAccounts(!showMoreAccounts)}
181
+ >
182
+ <Text style={[styles.sectionHeaderText, { color: textColor }]}>
183
+ {showMoreAccounts ? "Hide more accounts" : "Show more accounts"}
184
+ </Text>
185
+ <Text style={{ color: textColor, fontSize: 16 }}>
186
+ {showMoreAccounts ? "▲" : "▼"}
187
+ </Text>
188
+ </TouchableOpacity>
189
+
190
+ {showMoreAccounts && (
191
+ <View style={[styles.accountsContainer, { backgroundColor: secondaryBackgroundColor }]}>
192
+ {additionalAccounts.map((account) => (
193
+ <TouchableOpacity
194
+ key={account.id}
195
+ style={[styles.accountItem, { borderColor }]}
196
+ onPress={() => Alert.alert('Switch Account', `Switch to ${account.username}?`)}
197
+ >
198
+ <View style={styles.accountItemLeft}>
199
+ {account.avatarUrl ? (
200
+ <Image source={{ uri: account.avatarUrl }} style={styles.accountAvatar} />
201
+ ) : (
202
+ <View style={[styles.accountAvatar, { backgroundColor: primaryColor }]}>
203
+ <Text style={styles.avatarText}>
204
+ {account.username.charAt(0).toUpperCase()}
205
+ </Text>
206
+ </View>
207
+ )}
208
+ <View>
209
+ <Text style={[styles.accountName, { color: textColor }]}>
210
+ {account.username}
211
+ </Text>
212
+ <Text style={[styles.accountEmail, { color: iconColor }]}>
213
+ {account.email}
214
+ </Text>
215
+ </View>
216
+ </View>
217
+ </TouchableOpacity>
218
+ ))}
219
+
220
+ <TouchableOpacity
221
+ style={[styles.accountItem, { borderColor }]}
222
+ onPress={handleAddAccount}
223
+ >
224
+ <View style={styles.accountItemLeft}>
225
+ <View style={[styles.accountAvatar, styles.addAccountIcon, { borderColor }]}>
226
+ <Text style={{ fontSize: 20, color: textColor }}>+</Text>
227
+ </View>
228
+ <Text style={[styles.accountItemAction, { color: textColor }]}>
229
+ Add another account
230
+ </Text>
231
+ </View>
232
+ </TouchableOpacity>
233
+
234
+ <TouchableOpacity
235
+ style={[styles.accountItem, { borderColor }]}
236
+ onPress={handleSignOutAll}
237
+ >
238
+ <View style={styles.accountItemLeft}>
239
+ <View style={[styles.accountAvatar, styles.signOutIcon, { borderColor }]}>
240
+ <Text style={{ fontSize: 20, color: textColor }}>←</Text>
241
+ </View>
242
+ <Text style={[styles.accountItemAction, { color: textColor }]}>
243
+ Sign out of all accounts
244
+ </Text>
245
+ </View>
246
+ </TouchableOpacity>
247
+ </View>
248
+ )}
249
+
250
+ <View style={styles.sectionHeader}>
251
+ <Text style={[styles.sectionHeaderText, { color: textColor }]}>
252
+ More from Oxy
253
+ </Text>
254
+ </View>
255
+
256
+ <View style={[styles.featuresContainer, { backgroundColor: secondaryBackgroundColor }]}>
257
+ {renderFeatureItem(
258
+ <Text style={{ fontSize: 18 }}>🕒</Text>,
259
+ 'History',
260
+ 'Saving',
261
+ () => Alert.alert('History', 'View your history feature coming soon!')
262
+ )}
263
+
264
+ {renderFeatureItem(
265
+ <Text style={{ fontSize: 18 }}>⏱️</Text>,
266
+ 'Delete last 15 minutes',
267
+ null,
268
+ () => Alert.alert('Delete History', 'Delete recent history feature coming soon!')
269
+ )}
270
+
271
+ {renderFeatureItem(
272
+ <Text style={{ fontSize: 18 }}>📋</Text>,
273
+ 'Saves & Collections',
274
+ null,
275
+ () => Alert.alert('Saves', 'Saved items feature coming soon!')
276
+ )}
277
+
278
+ {renderFeatureItem(
279
+ <Text style={{ fontSize: 18 }}>🔍</Text>,
280
+ 'Search personalization',
281
+ null,
282
+ () => Alert.alert('Personalization', 'Search personalization feature coming soon!')
283
+ )}
284
+
285
+ {renderFeatureItem(
286
+ <Text style={{ fontSize: 18 }}>🛡️</Text>,
287
+ 'SafeSearch',
288
+ features.safeSearch ? 'On' : 'Off',
289
+ () => Alert.alert('SafeSearch', 'SafeSearch settings feature coming soon!')
290
+ )}
291
+
292
+ {renderFeatureItem(
293
+ <Text style={{ fontSize: 18 }}>🌐</Text>,
294
+ 'Language',
295
+ features.language,
296
+ () => Alert.alert('Language', 'Language settings feature coming soon!')
297
+ )}
298
+ </View>
299
+
300
+ <View style={styles.footerContainer}>
301
+ <View style={styles.footerButtonsRow}>
302
+ <TouchableOpacity
303
+ style={styles.footerButton}
304
+ onPress={() => Alert.alert('Settings', 'More settings feature coming soon!')}
305
+ >
306
+ <Text style={[styles.footerButtonText, { color: textColor }]}>
307
+ More settings
308
+ </Text>
309
+ </TouchableOpacity>
310
+
311
+ <TouchableOpacity
312
+ style={styles.footerButton}
313
+ onPress={() => Alert.alert('Help', 'Help & support feature coming soon!')}
314
+ >
315
+ <Text style={[styles.footerButtonText, { color: textColor }]}>
316
+ Help
317
+ </Text>
318
+ </TouchableOpacity>
319
+ </View>
320
+
321
+ <View style={styles.footerLinksRow}>
322
+ <TouchableOpacity onPress={() => Alert.alert('Privacy', 'Privacy Policy feature coming soon!')}>
323
+ <Text style={[styles.footerLink, { color: iconColor }]}>Privacy Policy</Text>
324
+ </TouchableOpacity>
325
+ <Text style={[{ color: iconColor, marginHorizontal: 5 }]}>•</Text>
326
+ <TouchableOpacity onPress={() => Alert.alert('Terms', 'Terms of Service feature coming soon!')}>
327
+ <Text style={[styles.footerLink, { color: iconColor }]}>Terms of Service</Text>
328
+ </TouchableOpacity>
329
+ </View>
330
+ </View>
331
+ </ScrollView>
332
+ </View>
333
+ );
334
+ };
335
+
336
+ const styles = StyleSheet.create({
337
+ container: {
338
+ flex: 1,
339
+ },
340
+ scrollView: {
341
+ flex: 1,
342
+ },
343
+ scrollContainer: {
344
+ padding: 20,
345
+ },
346
+ header: {
347
+ flexDirection: 'row',
348
+ justifyContent: 'space-between',
349
+ alignItems: 'center',
350
+ marginBottom: 20,
351
+ },
352
+ closeIcon: {
353
+ padding: 8,
354
+ },
355
+ profileContainer: {
356
+ padding: 20,
357
+ borderRadius: 15,
358
+ alignItems: 'center',
359
+ marginBottom: 20,
360
+ },
361
+ avatarContainer: {
362
+ margin: 10,
363
+ },
364
+ avatar: {
365
+ width: 70,
366
+ height: 70,
367
+ borderRadius: 35,
368
+ justifyContent: 'center',
369
+ alignItems: 'center',
370
+ },
371
+ avatarText: {
372
+ color: 'white',
373
+ fontSize: 30,
374
+ fontWeight: 'bold',
375
+ },
376
+ greeting: {
377
+ fontFamily: Platform.OS === 'web'
378
+ ? 'Phudu' // Use CSS font name directly for web
379
+ : 'Phudu-Bold', // Use exact font name as registered with Font.loadAsync
380
+ fontWeight: Platform.OS === 'web' ? 'bold' : undefined, // Only apply fontWeight on web
381
+ fontSize: 20,
382
+ marginVertical: 10,
383
+ },
384
+ manageAccountButton: {
385
+ paddingVertical: 10,
386
+ paddingHorizontal: 20,
387
+ borderWidth: 1,
388
+ borderRadius: 20,
389
+ marginTop: 10,
390
+ },
391
+ manageAccountText: {
392
+ fontSize: 14,
393
+ },
394
+ sectionHeader: {
395
+ flexDirection: 'row',
396
+ justifyContent: 'space-between',
397
+ alignItems: 'center',
398
+ paddingVertical: 15,
399
+ borderBottomWidth: 1,
400
+ marginBottom: 10,
401
+ },
402
+ sectionHeaderText: {
403
+ fontFamily: Platform.OS === 'web'
404
+ ? 'Phudu' // Use CSS font name directly for web
405
+ : 'Phudu-Bold', // Use exact font name as registered with Font.loadAsync
406
+ fontWeight: Platform.OS === 'web' ? 'bold' : undefined, // Only apply fontWeight on web
407
+ fontSize: 16,
408
+ },
409
+ accountsContainer: {
410
+ borderRadius: 15,
411
+ marginBottom: 20,
412
+ overflow: 'hidden',
413
+ },
414
+ accountItem: {
415
+ flexDirection: 'row',
416
+ justifyContent: 'space-between',
417
+ alignItems: 'center',
418
+ padding: 15,
419
+ borderBottomWidth: 1,
420
+ },
421
+ accountItemLeft: {
422
+ flexDirection: 'row',
423
+ alignItems: 'center',
424
+ },
425
+ accountAvatar: {
426
+ width: 36,
427
+ height: 36,
428
+ borderRadius: 18,
429
+ marginRight: 15,
430
+ justifyContent: 'center',
431
+ alignItems: 'center',
432
+ },
433
+ accountName: {
434
+ fontSize: 15,
435
+ fontWeight: '500',
436
+ },
437
+ accountEmail: {
438
+ fontSize: 14,
439
+ },
440
+ accountItemAction: {
441
+ fontSize: 15,
442
+ },
443
+ addAccountIcon: {
444
+ backgroundColor: 'transparent',
445
+ borderWidth: 1,
446
+ },
447
+ signOutIcon: {
448
+ backgroundColor: 'transparent',
449
+ borderWidth: 1,
450
+ },
451
+ featuresContainer: {
452
+ borderRadius: 15,
453
+ overflow: 'hidden',
454
+ marginBottom: 20,
455
+ },
456
+ featureItem: {
457
+ flexDirection: 'row',
458
+ justifyContent: 'space-between',
459
+ alignItems: 'center',
460
+ padding: 15,
461
+ borderBottomWidth: 1,
462
+ },
463
+ featureItemLeft: {
464
+ flexDirection: 'row',
465
+ alignItems: 'center',
466
+ },
467
+ iconContainer: {
468
+ width: 36,
469
+ height: 36,
470
+ justifyContent: 'center',
471
+ alignItems: 'center',
472
+ marginRight: 15,
473
+ },
474
+ featureItemTitle: {
475
+ fontSize: 15,
476
+ fontWeight: '500',
477
+ },
478
+ featureItemValue: {
479
+ fontSize: 14,
480
+ },
481
+ footerContainer: {
482
+ marginBottom: 30,
483
+ },
484
+ footerButtonsRow: {
485
+ flexDirection: 'row',
486
+ justifyContent: 'space-between',
487
+ marginBottom: 20,
488
+ },
489
+ footerButton: {
490
+ flex: 1,
491
+ padding: 15,
492
+ alignItems: 'center',
493
+ },
494
+ footerButtonText: {
495
+ fontSize: 15,
496
+ },
497
+ footerLinksRow: {
498
+ flexDirection: 'row',
499
+ justifyContent: 'center',
500
+ alignItems: 'center',
501
+ },
502
+ footerLink: {
503
+ fontSize: 13,
504
+ },
505
+ message: {
506
+ fontSize: 16,
507
+ textAlign: 'center',
508
+ marginTop: 24,
509
+ },
510
+ });
511
+
512
+ export default AccountOverviewScreen;