@oxyhq/services 5.7.5 → 5.8.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 (239) hide show
  1. package/README.md +76 -76
  2. package/lib/commonjs/core/index.js +177 -102
  3. package/lib/commonjs/core/index.js.map +1 -1
  4. package/lib/commonjs/index.js +88 -29
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/node/createAuth.js +585 -7
  7. package/lib/commonjs/node/createAuth.js.map +1 -1
  8. package/lib/commonjs/node/index.js +38 -1
  9. package/lib/commonjs/node/index.js.map +1 -1
  10. package/lib/commonjs/ui/components/Avatar.js +15 -6
  11. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  12. package/lib/commonjs/ui/components/GroupedItem.js +58 -13
  13. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  14. package/lib/commonjs/ui/components/GroupedSection.js +7 -1
  15. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  16. package/lib/commonjs/ui/components/Header.js +322 -0
  17. package/lib/commonjs/ui/components/Header.js.map +1 -0
  18. package/lib/commonjs/ui/components/OxyProvider.js +23 -7
  19. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  20. package/lib/commonjs/ui/components/index.js +7 -0
  21. package/lib/commonjs/ui/components/index.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +1 -1
  23. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/TextField.js +606 -546
  25. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  26. package/lib/commonjs/ui/components/internal/TextField.md +436 -0
  27. package/lib/commonjs/ui/context/OxyContext.js +122 -78
  28. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/useSessionSocket.js +5 -2
  30. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  31. package/lib/commonjs/ui/navigation/OxyRouter.js +1 -1
  32. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  33. package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -6
  34. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  35. package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
  36. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
  37. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +241 -598
  38. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1151 -406
  40. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +135 -237
  42. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/AppInfoScreen.js +246 -463
  44. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/FeedbackScreen.js +3 -3
  46. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +808 -650
  48. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +51 -72
  50. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/SessionManagementScreen.js +11 -29
  52. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/SignInScreen.js +30 -303
  54. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/SignUpScreen.js +4 -4
  56. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +19 -31
  58. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  59. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +7 -10
  60. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  61. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +11 -5
  62. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  63. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +11 -4
  64. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  65. package/lib/commonjs/ui/stores/authStore.js +12 -0
  66. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  67. package/lib/commonjs/ui/styles/authStyles.js +337 -0
  68. package/lib/commonjs/ui/styles/authStyles.js.map +1 -0
  69. package/lib/commonjs/ui/styles/index.js +11 -0
  70. package/lib/commonjs/ui/styles/index.js.map +1 -1
  71. package/lib/module/core/index.js +177 -41
  72. package/lib/module/core/index.js.map +1 -1
  73. package/lib/module/index.js +26 -4
  74. package/lib/module/index.js.map +1 -1
  75. package/lib/module/node/createAuth.js +584 -7
  76. package/lib/module/node/createAuth.js.map +1 -1
  77. package/lib/module/node/index.js +7 -1
  78. package/lib/module/node/index.js.map +1 -1
  79. package/lib/module/ui/components/Avatar.js +15 -6
  80. package/lib/module/ui/components/Avatar.js.map +1 -1
  81. package/lib/module/ui/components/GroupedItem.js +59 -14
  82. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  83. package/lib/module/ui/components/GroupedSection.js +7 -1
  84. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  85. package/lib/module/ui/components/Header.js +317 -0
  86. package/lib/module/ui/components/Header.js.map +1 -0
  87. package/lib/module/ui/components/OxyProvider.js +25 -9
  88. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  89. package/lib/module/ui/components/index.js +1 -0
  90. package/lib/module/ui/components/index.js.map +1 -1
  91. package/lib/module/ui/components/internal/GroupedPillButtons.js +1 -1
  92. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  93. package/lib/module/ui/components/internal/TextField.js +607 -547
  94. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  95. package/lib/module/ui/components/internal/TextField.md +436 -0
  96. package/lib/module/ui/context/OxyContext.js +121 -77
  97. package/lib/module/ui/context/OxyContext.js.map +1 -1
  98. package/lib/module/ui/hooks/useSessionSocket.js +5 -2
  99. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  100. package/lib/module/ui/navigation/OxyRouter.js +1 -1
  101. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  102. package/lib/module/ui/screens/AccountCenterScreen.js +6 -6
  103. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  104. package/lib/module/ui/screens/AccountManagementDemo.js +3 -3
  105. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
  106. package/lib/module/ui/screens/AccountOverviewScreen.js +242 -597
  107. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  108. package/lib/module/ui/screens/AccountSettingsScreen.js +1152 -407
  109. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  110. package/lib/module/ui/screens/AccountSwitcherScreen.js +135 -237
  111. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  112. package/lib/module/ui/screens/AppInfoScreen.js +248 -465
  113. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  114. package/lib/module/ui/screens/FeedbackScreen.js +3 -3
  115. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  116. package/lib/module/ui/screens/PaymentGatewayScreen.js +809 -651
  117. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  118. package/lib/module/ui/screens/RecoverAccountScreen.js +53 -74
  119. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  120. package/lib/module/ui/screens/SessionManagementScreen.js +11 -29
  121. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  122. package/lib/module/ui/screens/SignInScreen.js +32 -305
  123. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  124. package/lib/module/ui/screens/SignUpScreen.js +5 -5
  125. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  126. package/lib/module/ui/screens/internal/SignInPasswordStep.js +19 -31
  127. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  128. package/lib/module/ui/screens/internal/SignInUsernameStep.js +7 -10
  129. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  130. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +11 -5
  131. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  132. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +11 -4
  133. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  134. package/lib/module/ui/stores/authStore.js +12 -0
  135. package/lib/module/ui/stores/authStore.js.map +1 -1
  136. package/lib/module/ui/styles/authStyles.js +332 -0
  137. package/lib/module/ui/styles/authStyles.js.map +1 -0
  138. package/lib/module/ui/styles/index.js +1 -0
  139. package/lib/module/ui/styles/index.js.map +1 -1
  140. package/lib/typescript/core/index.d.ts +68 -24
  141. package/lib/typescript/core/index.d.ts.map +1 -1
  142. package/lib/typescript/index.d.ts +13 -3
  143. package/lib/typescript/index.d.ts.map +1 -1
  144. package/lib/typescript/node/createAuth.d.ts +112 -0
  145. package/lib/typescript/node/createAuth.d.ts.map +1 -1
  146. package/lib/typescript/node/index.d.ts +2 -0
  147. package/lib/typescript/node/index.d.ts.map +1 -1
  148. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
  149. package/lib/typescript/ui/components/GroupedItem.d.ts +6 -0
  150. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  151. package/lib/typescript/ui/components/GroupedSection.d.ts +6 -0
  152. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
  153. package/lib/typescript/ui/components/Header.d.ts +22 -0
  154. package/lib/typescript/ui/components/Header.d.ts.map +1 -0
  155. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  156. package/lib/typescript/ui/components/index.d.ts +1 -0
  157. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  158. package/lib/typescript/ui/components/internal/TextField.d.ts +31 -16
  159. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  160. package/lib/typescript/ui/context/OxyContext.d.ts +5 -2
  161. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  162. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  163. package/lib/typescript/ui/navigation/types.d.ts +9 -2
  164. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  165. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  166. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  167. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  168. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  169. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  170. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +5 -1
  171. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  172. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  173. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  174. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +1 -1
  175. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
  176. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +0 -1
  177. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
  178. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -1
  179. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -1
  180. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  181. package/lib/typescript/ui/styles/authStyles.d.ts +326 -0
  182. package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -0
  183. package/lib/typescript/ui/styles/index.d.ts +1 -0
  184. package/lib/typescript/ui/styles/index.d.ts.map +1 -1
  185. package/package.json +1 -4
  186. package/src/core/index.ts +195 -41
  187. package/src/index.ts +72 -4
  188. package/src/node/createAuth.ts +623 -7
  189. package/src/node/index.ts +19 -1
  190. package/src/ui/components/Avatar.tsx +11 -5
  191. package/src/ui/components/GroupedItem.tsx +57 -9
  192. package/src/ui/components/GroupedSection.tsx +12 -0
  193. package/src/ui/components/Header.tsx +364 -0
  194. package/src/ui/components/OxyProvider.tsx +31 -15
  195. package/src/ui/components/index.ts +1 -0
  196. package/src/ui/components/internal/GroupedPillButtons.tsx +1 -1
  197. package/src/ui/components/internal/TextField.md +436 -0
  198. package/src/ui/components/internal/TextField.tsx +720 -620
  199. package/src/ui/context/OxyContext.tsx +150 -63
  200. package/src/ui/hooks/useSessionSocket.ts +5 -2
  201. package/src/ui/navigation/OxyRouter.tsx +1 -1
  202. package/src/ui/navigation/types.ts +10 -2
  203. package/src/ui/screens/AccountCenterScreen.tsx +5 -5
  204. package/src/ui/screens/AccountManagementDemo.tsx +9 -9
  205. package/src/ui/screens/AccountOverviewScreen.tsx +265 -414
  206. package/src/ui/screens/AccountSettingsScreen.tsx +1165 -403
  207. package/src/ui/screens/AccountSwitcherScreen.tsx +158 -202
  208. package/src/ui/screens/AppInfoScreen.tsx +270 -497
  209. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  210. package/src/ui/screens/PaymentGatewayScreen.tsx +668 -365
  211. package/src/ui/screens/ProfileScreen.tsx +5 -5
  212. package/src/ui/screens/RecoverAccountScreen.tsx +46 -74
  213. package/src/ui/screens/SessionManagementScreen.tsx +14 -22
  214. package/src/ui/screens/SignInScreen.tsx +27 -294
  215. package/src/ui/screens/SignUpScreen.tsx +5 -5
  216. package/src/ui/screens/internal/SignInPasswordStep.tsx +11 -22
  217. package/src/ui/screens/internal/SignInUsernameStep.tsx +3 -10
  218. package/src/ui/screens/internal/SignUpIdentityStep.tsx +2 -5
  219. package/src/ui/screens/internal/SignUpSecurityStep.tsx +3 -4
  220. package/src/ui/stores/authStore.ts +12 -0
  221. package/src/ui/styles/authStyles.ts +352 -0
  222. package/src/ui/styles/index.ts +1 -0
  223. package/lib/commonjs/core/auth-manager.js +0 -440
  224. package/lib/commonjs/core/auth-manager.js.map +0 -1
  225. package/lib/commonjs/core/use-auth.js +0 -244
  226. package/lib/commonjs/core/use-auth.js.map +0 -1
  227. package/lib/module/core/auth-manager.js +0 -432
  228. package/lib/module/core/auth-manager.js.map +0 -1
  229. package/lib/module/core/use-auth.js +0 -235
  230. package/lib/module/core/use-auth.js.map +0 -1
  231. package/lib/typescript/core/auth-manager.d.ts +0 -136
  232. package/lib/typescript/core/auth-manager.d.ts.map +0 -1
  233. package/lib/typescript/core/use-auth.d.ts +0 -79
  234. package/lib/typescript/core/use-auth.d.ts.map +0 -1
  235. package/src/__tests__/middleware.test.ts +0 -105
  236. package/src/__tests__/setup.ts +0 -10
  237. package/src/__tests__/zero-config-auth.test.ts +0 -607
  238. package/src/core/auth-manager.ts +0 -500
  239. package/src/core/use-auth.tsx +0 -245
@@ -1,16 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useState, useEffect } from 'react';
4
- import { View, Text, TouchableOpacity, StyleSheet, Platform, Dimensions, Clipboard, ScrollView } from 'react-native';
4
+ import { View, Text, TouchableOpacity, StyleSheet, Platform, Dimensions, Clipboard, ScrollView, ActivityIndicator } from 'react-native';
5
5
  import { useOxy } from '../context/OxyContext';
6
6
  import { fontFamilies } from '../styles/fonts';
7
7
  import { packageInfo } from '../../constants/version';
8
8
  import { toast } from '../../lib/sonner';
9
- import { confirmAction } from '../utils/confirmAction';
10
- import OxyIcon from '../components/icon/OxyIcon';
11
9
  import { Ionicons } from '@expo/vector-icons';
12
10
  import OxyServicesLogo from '../../assets/icons/OxyServices';
13
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
+ import { Section, GroupedSection } from '../components';
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
13
  const AppInfoScreen = ({
15
14
  onClose,
16
15
  theme,
@@ -79,196 +78,46 @@ const AppInfoScreen = ({
79
78
  }
80
79
  };
81
80
  const runSystemCheck = async () => {
82
- if (!oxyServices) {
83
- toast.error('OxyServices not initialized');
84
- return;
85
- }
86
81
  setIsRunningSystemCheck(true);
87
- const checks = [];
88
-
89
- // Get the API base URL from the services instance
90
- const apiBaseUrl = oxyServices?.getBaseURL() || 'https://api.oxy.so'; // Default for now, could be made configurable
91
-
92
82
  try {
93
- // Check 1: API Server Health
94
- checks.push('🔍 Checking API server connection...');
95
- toast.info('Running system checks...', {
96
- duration: 2000
97
- });
98
- try {
99
- const data = await oxyServices.healthCheck();
100
- checks.push('✅ API server is responding');
101
- checks.push(`📊 Server stats: ${data.users || 0} users`);
102
- checks.push(`🌐 API URL: ${apiBaseUrl}`);
103
- setConnectionStatus('connected');
104
- } catch (error) {
105
- checks.push('❌ API server connection failed');
106
- checks.push(` Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
107
- checks.push(` URL: ${apiBaseUrl}`);
108
- setConnectionStatus('disconnected');
109
- }
83
+ // Simulate system check
84
+ await new Promise(resolve => setTimeout(resolve, 2000));
110
85
 
111
- // Check 2: Authentication Status
112
- checks.push('🔍 Checking authentication...');
113
- checks.push(`🔐 Authentication Status: ${isAuthenticated ? '✅ Authenticated' : '❌ Not authenticated'}`);
114
- if (isAuthenticated) {
115
- // Check 3: Token Validation
86
+ // Check API connection
87
+ if (oxyServices) {
116
88
  try {
117
- const isValid = await oxyServices.validate();
118
- if (isValid) {
119
- checks.push('✅ Authentication token is valid');
120
- } else {
121
- checks.push('❌ Authentication token is invalid');
122
- }
89
+ await oxyServices.healthCheck();
90
+ setConnectionStatus('connected');
123
91
  } catch (error) {
124
- checks.push('❌ Token validation failed');
125
- checks.push(` Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
92
+ setConnectionStatus('disconnected');
126
93
  }
127
94
  }
128
-
129
- // Check 4: Session Validation (if user has active sessions)
130
- if (user && sessions && sessions.length > 0) {
131
- checks.push('🔍 Checking active sessions...');
132
- try {
133
- // Just check if we can fetch sessions
134
- const userSessions = await oxyServices.getUserSessions();
135
- checks.push(`✅ Session validation successful (${userSessions.length} sessions)`);
136
- } catch (error) {
137
- checks.push('❌ Session validation failed');
138
- checks.push(` Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
139
- }
140
- }
141
-
142
- // Check 5: Platform Information
143
- checks.push('🔍 Checking platform information...');
144
- checks.push(`✅ Platform: ${Platform.OS} ${Platform.Version || 'Unknown'}`);
145
- checks.push(`✅ Screen: ${systemInfo?.screenDimensions.width || 0}x${systemInfo?.screenDimensions.height || 0}`);
146
- checks.push(`✅ Environment: ${__DEV__ ? 'Development' : 'Production'}`);
147
-
148
- // Check 6: Package Information
149
- checks.push('🔍 Checking package information...');
150
- checks.push(`✅ Package: ${packageInfo.name}@${packageInfo.version}`);
151
-
152
- // Check 7: Memory and Performance (basic)
153
- checks.push('🔍 Checking performance metrics...');
154
- const memoryUsage = performance.memory;
155
- if (memoryUsage) {
156
- const usedMB = Math.round(memoryUsage.usedJSHeapSize / 1024 / 1024);
157
- const totalMB = Math.round(memoryUsage.totalJSHeapSize / 1024 / 1024);
158
- checks.push(`✅ Memory usage: ${usedMB}MB / ${totalMB}MB`);
159
- } else {
160
- checks.push('✅ Performance metrics not available on this platform');
161
- }
162
-
163
- // Final summary
164
- const errorCount = checks.filter(check => check.includes('❌')).length;
165
- const warningCount = checks.filter(check => check.includes('⚠️')).length;
166
- checks.push('');
167
- checks.push('📋 SYSTEM CHECK SUMMARY:');
168
- if (errorCount === 0 && warningCount === 0) {
169
- checks.push('✅ All systems operational');
170
- toast.success('System check completed - All systems operational!');
171
- } else if (errorCount === 0) {
172
- checks.push(`⚠️ ${warningCount} warning(s) found`);
173
- toast.warning(`System check completed with ${warningCount} warning(s)`);
174
- } else {
175
- checks.push(`❌ ${errorCount} error(s) and ${warningCount} warning(s) found`);
176
- toast.error(`System check failed with ${errorCount} error(s)`);
177
- }
178
-
179
- // Show results in an alert and copy to clipboard
180
- const report = checks.join('\n');
181
- confirmAction(`Check completed. Results copied to clipboard.\n\nSummary: ${errorCount} errors, ${warningCount} warnings.\n\nCopy full report to clipboard?`, () => copyToClipboard(report, 'System check report'));
95
+ toast.success('System check completed successfully');
182
96
  } catch (error) {
183
- toast.error('System check failed to run');
184
- console.error('System check error:', error);
97
+ toast.error('System check failed');
185
98
  } finally {
186
99
  setIsRunningSystemCheck(false);
187
100
  }
188
101
  };
189
102
  const generateFullReport = () => {
190
103
  const report = {
191
- packageInfo: {
192
- name: packageInfo.name,
193
- version: packageInfo.version,
194
- description: packageInfo.description
195
- },
196
- systemInfo,
197
- userInfo: {
198
- isAuthenticated: !!user,
199
- userId: user?.id || 'Not authenticated',
200
- username: user?.username || 'N/A',
201
- totalUsers: sessions?.length || 0
202
- },
203
- apiConfiguration: {
204
- apiUrl: oxyServices?.getBaseURL() || 'Not configured'
205
- },
206
- buildInfo: {
207
- timestamp: new Date().toISOString(),
208
- environment: __DEV__ ? 'Development' : 'Production'
209
- }
104
+ package: packageInfo,
105
+ system: systemInfo,
106
+ user: user ? {
107
+ id: user.id,
108
+ username: user.username,
109
+ email: user.email,
110
+ isPremium: user.isPremium
111
+ } : null,
112
+ sessions: sessions?.length || 0,
113
+ connection: connectionStatus,
114
+ timestamp: new Date().toISOString()
210
115
  };
211
116
  return JSON.stringify(report, null, 2);
212
117
  };
213
118
  const handleCopyFullReport = () => {
214
119
  const report = generateFullReport();
215
- copyToClipboard(report, 'Full application report');
216
- };
217
- const InfoRow = ({
218
- label,
219
- value,
220
- copyable = false,
221
- icon = 'information-circle',
222
- iconComponent,
223
- color = '#8E8E93',
224
- isFirst = false,
225
- isLast = false,
226
- onPress,
227
- showChevron = false
228
- }) => {
229
- const handlePress = () => {
230
- if (onPress) {
231
- onPress();
232
- } else if (copyable) {
233
- copyToClipboard(value, label);
234
- }
235
- };
236
- const isInteractive = copyable || !!onPress;
237
- return /*#__PURE__*/_jsxs(TouchableOpacity, {
238
- style: [styles.settingItem, isFirst && styles.firstSettingItem, isLast && styles.lastSettingItem],
239
- onPress: isInteractive ? handlePress : undefined,
240
- disabled: !isInteractive,
241
- children: [/*#__PURE__*/_jsxs(View, {
242
- style: styles.settingInfo,
243
- children: [iconComponent ? (/*#__PURE__*/React.cloneElement(iconComponent, {
244
- style: styles.settingIcon
245
- })) : /*#__PURE__*/_jsx(OxyIcon, {
246
- name: icon,
247
- size: 20,
248
- color: color,
249
- style: styles.settingIcon
250
- }), /*#__PURE__*/_jsxs(View, {
251
- style: styles.settingDetails,
252
- children: [/*#__PURE__*/_jsx(Text, {
253
- style: styles.settingLabel,
254
- children: label
255
- }), /*#__PURE__*/_jsx(Text, {
256
- style: [styles.settingValue, (copyable || onPress) && {
257
- color: primaryColor
258
- }],
259
- children: value
260
- })]
261
- })]
262
- }), copyable && /*#__PURE__*/_jsx(OxyIcon, {
263
- name: "copy",
264
- size: 16,
265
- color: "#ccc"
266
- }), showChevron && /*#__PURE__*/_jsx(OxyIcon, {
267
- name: "chevron-forward",
268
- size: 16,
269
- color: "#ccc"
270
- })]
271
- });
120
+ copyToClipboard(report, 'Full system report');
272
121
  };
273
122
  return /*#__PURE__*/_jsxs(View, {
274
123
  style: [styles.container, {
@@ -293,105 +142,119 @@ const AppInfoScreen = ({
293
142
  }), /*#__PURE__*/_jsxs(ScrollView, {
294
143
  style: styles.content,
295
144
  showsVerticalScrollIndicator: false,
296
- children: [/*#__PURE__*/_jsxs(View, {
297
- style: styles.section,
298
- children: [/*#__PURE__*/_jsx(Text, {
299
- style: styles.sectionTitle,
300
- children: "Package Information"
301
- }), /*#__PURE__*/_jsx(InfoRow, {
302
- label: "Name",
303
- value: packageInfo.name,
304
- copyable: true,
305
- iconComponent: /*#__PURE__*/_jsx(OxyServicesLogo, {
306
- width: 20,
307
- height: 20
308
- }),
309
- color: "#007AFF",
310
- isFirst: true
311
- }), /*#__PURE__*/_jsx(InfoRow, {
312
- label: "Version",
313
- value: packageInfo.version,
314
- copyable: true,
315
- icon: "pricetag",
316
- color: "#5856D6"
317
- }), /*#__PURE__*/_jsx(InfoRow, {
318
- label: "Description",
319
- value: packageInfo.description || 'No description',
320
- icon: "document-text",
321
- color: "#34C759"
322
- }), /*#__PURE__*/_jsx(InfoRow, {
323
- label: "Main Entry",
324
- value: packageInfo.main || 'N/A',
325
- icon: "code",
326
- color: "#FF9500"
327
- }), /*#__PURE__*/_jsx(InfoRow, {
328
- label: "Module Entry",
329
- value: packageInfo.module || 'N/A',
330
- icon: "library",
331
- color: "#FF3B30"
332
- }), /*#__PURE__*/_jsx(InfoRow, {
333
- label: "Types Entry",
334
- value: packageInfo.types || 'N/A',
335
- icon: "construct",
336
- color: "#32D74B",
337
- isLast: true
338
- })]
339
- }), /*#__PURE__*/_jsxs(View, {
340
- style: styles.section,
341
- children: [/*#__PURE__*/_jsx(Text, {
342
- style: styles.sectionTitle,
343
- children: "System Information"
344
- }), /*#__PURE__*/_jsx(InfoRow, {
345
- label: "Platform",
346
- value: Platform.OS,
347
- icon: "phone-portrait",
348
- color: "#007AFF",
349
- isFirst: true
350
- }), /*#__PURE__*/_jsx(InfoRow, {
351
- label: "Platform Version",
352
- value: systemInfo?.version || 'Loading...',
353
- icon: "hardware-chip",
354
- color: "#5856D6"
355
- }), /*#__PURE__*/_jsx(InfoRow, {
356
- label: "Screen Width",
357
- value: `${systemInfo?.screenDimensions.width || 0}px`,
358
- icon: "resize",
359
- color: "#FF9500"
360
- }), /*#__PURE__*/_jsx(InfoRow, {
361
- label: "Screen Height",
362
- value: `${systemInfo?.screenDimensions.height || 0}px`,
363
- icon: "resize",
364
- color: "#FF3B30"
365
- }), /*#__PURE__*/_jsx(InfoRow, {
366
- label: "Environment",
367
- value: __DEV__ ? 'Development' : 'Production',
368
- icon: "settings",
369
- color: "#34C759",
370
- isLast: true
371
- })]
372
- }), /*#__PURE__*/_jsxs(View, {
373
- style: styles.section,
374
- children: [/*#__PURE__*/_jsx(Text, {
375
- style: styles.sectionTitle,
376
- children: "User Information"
377
- }), /*#__PURE__*/_jsx(InfoRow, {
378
- label: "Authentication Status",
379
- value: isAuthenticated ? 'Authenticated' : 'Not Authenticated',
380
- icon: "shield-checkmark",
381
- color: isAuthenticated ? '#34C759' : '#FF3B30',
382
- isFirst: true
383
- }), user && /*#__PURE__*/_jsxs(_Fragment, {
384
- children: [/*#__PURE__*/_jsx(InfoRow, {
385
- label: "User ID",
386
- value: user.id,
387
- copyable: true,
388
- icon: "person",
389
- color: "#007AFF"
390
- }), /*#__PURE__*/_jsx(InfoRow, {
391
- label: "Username",
392
- value: user.username || 'N/A',
393
- icon: "at",
394
- color: "#5856D6",
145
+ children: [/*#__PURE__*/_jsx(Section, {
146
+ title: "Package Information",
147
+ theme: theme,
148
+ children: /*#__PURE__*/_jsx(GroupedSection, {
149
+ items: [{
150
+ id: 'name',
151
+ icon: 'information-circle',
152
+ iconColor: '#007AFF',
153
+ title: 'Name',
154
+ subtitle: packageInfo.name,
155
+ onPress: () => copyToClipboard(packageInfo.name, 'Package name'),
156
+ customContent: /*#__PURE__*/_jsx(OxyServicesLogo, {
157
+ width: 20,
158
+ height: 20,
159
+ style: styles.settingIcon
160
+ })
161
+ }, {
162
+ id: 'version',
163
+ icon: 'pricetag',
164
+ iconColor: '#5856D6',
165
+ title: 'Version',
166
+ subtitle: packageInfo.version,
167
+ onPress: () => copyToClipboard(packageInfo.version, 'Version')
168
+ }, {
169
+ id: 'description',
170
+ icon: 'document-text',
171
+ iconColor: '#34C759',
172
+ title: 'Description',
173
+ subtitle: packageInfo.description || 'No description'
174
+ }, {
175
+ id: 'main-entry',
176
+ icon: 'code',
177
+ iconColor: '#FF9500',
178
+ title: 'Main Entry',
179
+ subtitle: packageInfo.main || 'N/A',
180
+ onPress: () => copyToClipboard(packageInfo.main || 'N/A', 'Main entry')
181
+ }, {
182
+ id: 'module-entry',
183
+ icon: 'library',
184
+ iconColor: '#FF3B30',
185
+ title: 'Module Entry',
186
+ subtitle: packageInfo.module || 'N/A',
187
+ onPress: () => copyToClipboard(packageInfo.module || 'N/A', 'Module entry')
188
+ }, {
189
+ id: 'types-entry',
190
+ icon: 'construct',
191
+ iconColor: '#32D74B',
192
+ title: 'Types Entry',
193
+ subtitle: packageInfo.types || 'N/A',
194
+ onPress: () => copyToClipboard(packageInfo.types || 'N/A', 'Types entry')
195
+ }],
196
+ theme: theme
197
+ })
198
+ }), /*#__PURE__*/_jsx(Section, {
199
+ title: "System Information",
200
+ theme: theme,
201
+ children: /*#__PURE__*/_jsx(GroupedSection, {
202
+ items: [{
203
+ id: 'platform',
204
+ icon: 'phone-portrait',
205
+ iconColor: '#007AFF',
206
+ title: 'Platform',
207
+ subtitle: Platform.OS
208
+ }, {
209
+ id: 'platform-version',
210
+ icon: 'hardware-chip',
211
+ iconColor: '#5856D6',
212
+ title: 'Platform Version',
213
+ subtitle: systemInfo?.version || 'Loading...'
214
+ }, {
215
+ id: 'screen-width',
216
+ icon: 'resize',
217
+ iconColor: '#FF9500',
218
+ title: 'Screen Width',
219
+ subtitle: `${systemInfo?.screenDimensions.width || 0}px`
220
+ }, {
221
+ id: 'screen-height',
222
+ icon: 'resize',
223
+ iconColor: '#FF3B30',
224
+ title: 'Screen Height',
225
+ subtitle: `${systemInfo?.screenDimensions.height || 0}px`
226
+ }, {
227
+ id: 'environment',
228
+ icon: 'settings',
229
+ iconColor: '#34C759',
230
+ title: 'Environment',
231
+ subtitle: __DEV__ ? 'Development' : 'Production'
232
+ }],
233
+ theme: theme
234
+ })
235
+ }), /*#__PURE__*/_jsx(Section, {
236
+ title: "User Information",
237
+ theme: theme,
238
+ children: /*#__PURE__*/_jsx(GroupedSection, {
239
+ items: [{
240
+ id: 'auth-status',
241
+ icon: 'shield-checkmark',
242
+ iconColor: isAuthenticated ? '#34C759' : '#FF3B30',
243
+ title: 'Authentication Status',
244
+ subtitle: isAuthenticated ? 'Authenticated' : 'Not Authenticated'
245
+ }, ...(user ? [{
246
+ id: 'user-id',
247
+ icon: 'person',
248
+ iconColor: '#007AFF',
249
+ title: 'User ID',
250
+ subtitle: user.id,
251
+ onPress: () => copyToClipboard(user.id, 'User ID')
252
+ }, {
253
+ id: 'username',
254
+ icon: 'at',
255
+ iconColor: '#5856D6',
256
+ title: 'Username',
257
+ subtitle: user.username || 'N/A',
395
258
  onPress: () => {
396
259
  if (user?.username && navigate) {
397
260
  navigate('Profile', {
@@ -400,143 +263,119 @@ const AppInfoScreen = ({
400
263
  } else {
401
264
  toast.info('No username available or navigation not supported');
402
265
  }
403
- },
404
- showChevron: true
405
- }), /*#__PURE__*/_jsx(InfoRow, {
406
- label: "Email",
407
- value: user.email || 'N/A',
408
- icon: "mail",
409
- color: "#FF9500"
410
- }), /*#__PURE__*/_jsx(InfoRow, {
411
- label: "Premium Status",
412
- value: user.isPremium ? 'Premium' : 'Standard',
413
- icon: "star",
414
- color: user.isPremium ? '#FFD700' : '#8E8E93'
415
- })]
416
- }), /*#__PURE__*/_jsx(InfoRow, {
417
- label: "Total Active Sessions",
418
- value: sessions?.length?.toString() || '0',
419
- icon: "people",
420
- color: "#32D74B",
421
- isLast: true
422
- })]
423
- }), /*#__PURE__*/_jsxs(View, {
424
- style: styles.section,
425
- children: [/*#__PURE__*/_jsx(Text, {
426
- style: styles.sectionTitle,
427
- children: "API Configuration"
428
- }), /*#__PURE__*/_jsx(InfoRow, {
429
- label: "API Base URL",
430
- value: oxyServices?.getBaseURL() || 'Not configured',
431
- copyable: true,
432
- icon: "server",
433
- color: "#007AFF",
434
- isFirst: true
435
- }), /*#__PURE__*/_jsx(InfoRow, {
436
- label: "Connection Status",
437
- value: connectionStatus === 'checking' ? 'Checking...' : connectionStatus === 'connected' ? 'Connected' : connectionStatus === 'disconnected' ? 'Disconnected' : 'Unknown',
438
- icon: connectionStatus === 'checking' ? 'sync' : connectionStatus === 'connected' ? 'wifi' : 'wifi-off',
439
- color: connectionStatus === 'checking' ? '#FF9500' : connectionStatus === 'connected' ? '#34C759' : '#FF3B30',
440
- onPress: async () => {
441
- setConnectionStatus('checking');
442
- if (!oxyServices) {
443
- setConnectionStatus('disconnected');
444
- toast.error('OxyServices not initialized');
445
- return;
446
266
  }
447
- try {
448
- await oxyServices.healthCheck();
449
- setConnectionStatus('connected');
450
- toast.success('API connection successful');
451
- } catch (error) {
452
- setConnectionStatus('disconnected');
453
- toast.error('Failed to connect to API server');
267
+ }, {
268
+ id: 'email',
269
+ icon: 'mail',
270
+ iconColor: '#FF9500',
271
+ title: 'Email',
272
+ subtitle: user.email || 'N/A'
273
+ }, {
274
+ id: 'premium-status',
275
+ icon: 'star',
276
+ iconColor: user.isPremium ? '#FFD700' : '#8E8E93',
277
+ title: 'Premium Status',
278
+ subtitle: user.isPremium ? 'Premium' : 'Standard'
279
+ }] : []), {
280
+ id: 'active-sessions',
281
+ icon: 'people',
282
+ iconColor: '#32D74B',
283
+ title: 'Total Active Sessions',
284
+ subtitle: sessions?.length?.toString() || '0'
285
+ }],
286
+ theme: theme
287
+ })
288
+ }), /*#__PURE__*/_jsx(Section, {
289
+ title: "API Configuration",
290
+ theme: theme,
291
+ children: /*#__PURE__*/_jsx(GroupedSection, {
292
+ items: [{
293
+ id: 'api-base-url',
294
+ icon: 'server',
295
+ iconColor: '#007AFF',
296
+ title: 'API Base URL',
297
+ subtitle: oxyServices?.getBaseURL() || 'Not configured',
298
+ onPress: () => copyToClipboard(oxyServices?.getBaseURL() || 'Not configured', 'API Base URL')
299
+ }, {
300
+ id: 'connection-status',
301
+ icon: connectionStatus === 'checking' ? 'sync' : connectionStatus === 'connected' ? 'wifi' : 'wifi-off',
302
+ iconColor: connectionStatus === 'checking' ? '#FF9500' : connectionStatus === 'connected' ? '#34C759' : '#FF3B30',
303
+ title: 'Connection Status',
304
+ subtitle: connectionStatus === 'checking' ? 'Checking...' : connectionStatus === 'connected' ? 'Connected' : connectionStatus === 'disconnected' ? 'Disconnected' : 'Unknown',
305
+ onPress: async () => {
306
+ setConnectionStatus('checking');
307
+ if (!oxyServices) {
308
+ setConnectionStatus('disconnected');
309
+ toast.error('OxyServices not initialized');
310
+ return;
311
+ }
312
+ try {
313
+ await oxyServices.healthCheck();
314
+ setConnectionStatus('connected');
315
+ toast.success('API connection successful');
316
+ } catch (error) {
317
+ setConnectionStatus('disconnected');
318
+ toast.error('Failed to connect to API server');
319
+ }
454
320
  }
455
- },
456
- showChevron: true,
457
- isLast: true
458
- })]
459
- }), /*#__PURE__*/_jsxs(View, {
460
- style: styles.section,
461
- children: [/*#__PURE__*/_jsx(Text, {
462
- style: styles.sectionTitle,
463
- children: "Build Information"
464
- }), /*#__PURE__*/_jsx(InfoRow, {
465
- label: "Build Timestamp",
466
- value: systemInfo?.timestamp || 'Loading...',
467
- copyable: true,
468
- icon: "time",
469
- color: "#007AFF",
470
- isFirst: true
471
- }), /*#__PURE__*/_jsx(InfoRow, {
472
- label: "React Native",
473
- value: "Expo/React Native",
474
- icon: "logo-react",
475
- color: "#61DAFB"
476
- }), /*#__PURE__*/_jsx(InfoRow, {
477
- label: "JavaScript Engine",
478
- value: "Hermes",
479
- icon: "flash",
480
- color: "#FF3B30",
481
- isLast: true
482
- })]
483
- }), /*#__PURE__*/_jsxs(View, {
484
- style: styles.section,
485
- children: [/*#__PURE__*/_jsx(Text, {
486
- style: styles.sectionTitle,
487
- children: "Quick Actions"
488
- }), /*#__PURE__*/_jsxs(TouchableOpacity, {
489
- style: [styles.settingItem, styles.firstSettingItem],
490
- onPress: handleCopyFullReport,
491
- children: [/*#__PURE__*/_jsxs(View, {
492
- style: styles.settingInfo,
493
- children: [/*#__PURE__*/_jsx(OxyIcon, {
494
- name: "copy",
495
- size: 20,
496
- color: "#007AFF",
497
- style: styles.settingIcon
498
- }), /*#__PURE__*/_jsxs(View, {
499
- style: styles.settingDetails,
500
- children: [/*#__PURE__*/_jsx(Text, {
501
- style: styles.settingLabel,
502
- children: "Copy Full Report"
503
- }), /*#__PURE__*/_jsx(Text, {
504
- style: styles.settingDescription,
505
- children: "Copy complete application information to clipboard"
506
- })]
507
- })]
508
- }), /*#__PURE__*/_jsx(OxyIcon, {
509
- name: "chevron-forward",
510
- size: 16,
511
- color: "#ccc"
512
- })]
513
- }), /*#__PURE__*/_jsxs(TouchableOpacity, {
514
- style: [styles.settingItem, styles.lastSettingItem, isRunningSystemCheck && styles.disabledSettingItem],
515
- onPress: runSystemCheck,
516
- disabled: isRunningSystemCheck,
517
- children: [/*#__PURE__*/_jsxs(View, {
518
- style: styles.settingInfo,
519
- children: [/*#__PURE__*/_jsx(OxyIcon, {
520
- name: isRunningSystemCheck ? "sync" : "checkmark-circle",
521
- size: 20,
522
- color: isRunningSystemCheck ? "#FF9500" : "#34C759",
523
- style: [styles.settingIcon, isRunningSystemCheck && styles.spinningIcon]
524
- }), /*#__PURE__*/_jsxs(View, {
525
- style: styles.settingDetails,
526
- children: [/*#__PURE__*/_jsx(Text, {
527
- style: styles.settingLabel,
528
- children: isRunningSystemCheck ? 'Running System Check...' : 'Run System Check'
529
- }), /*#__PURE__*/_jsx(Text, {
530
- style: styles.settingDescription,
531
- children: isRunningSystemCheck ? 'Checking API, authentication, and platform status...' : 'Verify application health and status'
532
- })]
533
- })]
534
- }), !isRunningSystemCheck && /*#__PURE__*/_jsx(OxyIcon, {
535
- name: "chevron-forward",
536
- size: 16,
537
- color: "#ccc"
538
- })]
539
- })]
321
+ }],
322
+ theme: theme
323
+ })
324
+ }), /*#__PURE__*/_jsx(Section, {
325
+ title: "Build Information",
326
+ theme: theme,
327
+ children: /*#__PURE__*/_jsx(GroupedSection, {
328
+ items: [{
329
+ id: 'build-timestamp',
330
+ icon: 'time',
331
+ iconColor: '#007AFF',
332
+ title: 'Build Timestamp',
333
+ subtitle: systemInfo?.timestamp || 'Loading...',
334
+ onPress: () => copyToClipboard(systemInfo?.timestamp || 'Loading...', 'Build timestamp')
335
+ }, {
336
+ id: 'react-native',
337
+ icon: 'logo-react',
338
+ iconColor: '#61DAFB',
339
+ title: 'React Native',
340
+ subtitle: 'Expo/React Native'
341
+ }, {
342
+ id: 'js-engine',
343
+ icon: 'flash',
344
+ iconColor: '#FF3B30',
345
+ title: 'JavaScript Engine',
346
+ subtitle: 'Hermes'
347
+ }],
348
+ theme: theme
349
+ })
350
+ }), /*#__PURE__*/_jsx(Section, {
351
+ title: "Quick Actions",
352
+ theme: theme,
353
+ children: /*#__PURE__*/_jsx(GroupedSection, {
354
+ items: [{
355
+ id: 'copy-full-report',
356
+ icon: 'copy',
357
+ iconColor: '#007AFF',
358
+ title: 'Copy Full Report',
359
+ subtitle: 'Copy complete application information to clipboard',
360
+ onPress: handleCopyFullReport
361
+ }, {
362
+ id: 'run-system-check',
363
+ icon: isRunningSystemCheck ? 'sync' : 'checkmark-circle',
364
+ iconColor: isRunningSystemCheck ? '#FF9500' : '#34C759',
365
+ title: isRunningSystemCheck ? 'Running System Check...' : 'Run System Check',
366
+ subtitle: isRunningSystemCheck ? 'Checking API, authentication, and platform status...' : 'Verify application health and status',
367
+ onPress: runSystemCheck,
368
+ disabled: isRunningSystemCheck,
369
+ customContent: isRunningSystemCheck ? /*#__PURE__*/_jsx(ActivityIndicator, {
370
+ color: "#FF9500",
371
+ size: "small",
372
+ style: {
373
+ marginRight: 16
374
+ }
375
+ }) : null
376
+ }],
377
+ theme: theme
378
+ })
540
379
  })]
541
380
  })]
542
381
  });
@@ -569,64 +408,8 @@ const styles = StyleSheet.create({
569
408
  flex: 1,
570
409
  padding: 16
571
410
  },
572
- section: {
573
- marginBottom: 24
574
- },
575
- sectionTitle: {
576
- fontSize: 16,
577
- fontWeight: '600',
578
- color: '#333',
579
- marginBottom: 12,
580
- fontFamily: fontFamilies.phuduSemiBold
581
- },
582
- settingItem: {
583
- backgroundColor: '#fff',
584
- padding: 16,
585
- flexDirection: 'row',
586
- alignItems: 'center',
587
- justifyContent: 'space-between',
588
- marginBottom: 2
589
- },
590
- firstSettingItem: {
591
- borderTopLeftRadius: 24,
592
- borderTopRightRadius: 24
593
- },
594
- lastSettingItem: {
595
- borderBottomLeftRadius: 24,
596
- borderBottomRightRadius: 24,
597
- marginBottom: 8
598
- },
599
- settingInfo: {
600
- flexDirection: 'row',
601
- alignItems: 'center',
602
- flex: 1
603
- },
604
411
  settingIcon: {
605
412
  marginRight: 12
606
- },
607
- settingDetails: {
608
- flex: 1
609
- },
610
- settingLabel: {
611
- fontSize: 16,
612
- fontWeight: '500',
613
- color: '#333',
614
- marginBottom: 2
615
- },
616
- settingValue: {
617
- fontSize: 14,
618
- color: '#666'
619
- },
620
- settingDescription: {
621
- fontSize: 14,
622
- color: '#999'
623
- },
624
- disabledSettingItem: {
625
- opacity: 0.6
626
- },
627
- spinningIcon: {
628
- // Note: Animation would need to be implemented with Animated API
629
- // For now, just showing the sync icon to indicate loading
630
413
  }
631
414
  });
632
415
  export default AppInfoScreen;