@onairos/react-native 3.1.12 → 3.1.13

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 (604) hide show
  1. package/lib/commonjs/api/index.js +75 -1
  2. package/lib/commonjs/api/index.js.map +1 -1
  3. package/lib/commonjs/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  4. package/lib/commonjs/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  5. package/lib/commonjs/assets/icons/Facebookicon.png +0 -0
  6. package/lib/commonjs/assets/icons/Gmail.png +0 -0
  7. package/lib/commonjs/assets/icons/Linkedinicon.png +0 -0
  8. package/lib/commonjs/assets/icons/Redditicon.png +0 -0
  9. package/lib/commonjs/assets/icons/YouTubeicon2.png +0 -0
  10. package/lib/commonjs/assets/icons/YouTubeicon3.png +0 -0
  11. package/lib/commonjs/assets/icons/farcaster.png +0 -0
  12. package/lib/commonjs/assets/icons/instagram.png +0 -0
  13. package/lib/commonjs/assets/icons/pinterest.png +0 -0
  14. package/lib/commonjs/assets/icons/swerv_logo.png +0 -0
  15. package/lib/commonjs/assets/icons/twitter.jpg +0 -0
  16. package/lib/commonjs/assets/images/Checkbox.svg +3 -0
  17. package/lib/commonjs/assets/images/EnochE.svg +19 -0
  18. package/lib/commonjs/assets/images/Enochicon1.png +0 -0
  19. package/lib/commonjs/assets/images/Face_ID_logo.png +0 -0
  20. package/lib/commonjs/assets/images/Facebookicon.png +0 -0
  21. package/lib/commonjs/assets/images/Gmail.png +0 -0
  22. package/lib/commonjs/assets/images/Googlelogo.png +0 -0
  23. package/lib/commonjs/assets/images/Linkedinicon.png +0 -0
  24. package/lib/commonjs/assets/images/Onairoslogo.png +0 -0
  25. package/lib/commonjs/assets/images/Personalityprofile.svg +3 -0
  26. package/lib/commonjs/assets/images/Personalitytraits.svg +3 -0
  27. package/lib/commonjs/assets/images/Redditicon.png +0 -0
  28. package/lib/commonjs/assets/images/Userpreferences.svg +3 -0
  29. package/lib/commonjs/assets/images/YouTubeicon3.png +0 -0
  30. package/lib/commonjs/assets/images/arrow.svg +20 -0
  31. package/lib/commonjs/assets/images/basicproficon.svg +43 -0
  32. package/lib/commonjs/assets/images/basicprofile.svg +3 -0
  33. package/lib/commonjs/assets/images/checkmark.svg +4 -0
  34. package/lib/commonjs/assets/images/contentanalysis.svg +3 -0
  35. package/lib/commonjs/assets/images/contenticon.svg +23 -0
  36. package/lib/commonjs/assets/images/persona1.png +0 -0
  37. package/lib/commonjs/assets/images/persona2.png +0 -0
  38. package/lib/commonjs/assets/images/persona3.png +0 -0
  39. package/lib/commonjs/assets/images/persona4.png +0 -0
  40. package/lib/commonjs/assets/images/persona5.png +0 -0
  41. package/lib/commonjs/assets/images/personalityicon.svg +18 -0
  42. package/lib/commonjs/assets/images/x-close.svg +3 -0
  43. package/lib/commonjs/components/BodyText.js +27 -0
  44. package/lib/commonjs/components/BodyText.js.map +1 -0
  45. package/lib/commonjs/components/BrandMark.js +44 -0
  46. package/lib/commonjs/components/BrandMark.js.map +1 -0
  47. package/lib/commonjs/components/CodeInput.js +30 -0
  48. package/lib/commonjs/components/CodeInput.js.map +1 -0
  49. package/lib/commonjs/components/EmailInput.js +30 -0
  50. package/lib/commonjs/components/EmailInput.js.map +1 -0
  51. package/lib/commonjs/components/ExistingUserDataConfirmation.js +474 -0
  52. package/lib/commonjs/components/ExistingUserDataConfirmation.js.map +1 -0
  53. package/lib/commonjs/components/GoogleButton.js +55 -0
  54. package/lib/commonjs/components/GoogleButton.js.map +1 -0
  55. package/lib/commonjs/components/HeadingGroup.js +43 -0
  56. package/lib/commonjs/components/HeadingGroup.js.map +1 -0
  57. package/lib/commonjs/components/ModalHeader.js +99 -0
  58. package/lib/commonjs/components/ModalHeader.js.map +1 -0
  59. package/lib/commonjs/components/ModalSheet.js +41 -0
  60. package/lib/commonjs/components/ModalSheet.js.map +1 -0
  61. package/lib/commonjs/components/Onairos.js +1 -3
  62. package/lib/commonjs/components/Onairos.js.map +1 -1
  63. package/lib/commonjs/components/OnairosButton.js +171 -190
  64. package/lib/commonjs/components/OnairosButton.js.map +1 -1
  65. package/lib/commonjs/components/OnairosSignInButton.js +169 -0
  66. package/lib/commonjs/components/OnairosSignInButton.js.map +1 -0
  67. package/lib/commonjs/components/Overlay.js +5 -5
  68. package/lib/commonjs/components/Overlay.js.map +1 -1
  69. package/lib/commonjs/components/PersonaImage.js +60 -0
  70. package/lib/commonjs/components/PersonaImage.js.map +1 -0
  71. package/lib/commonjs/components/PersonaLoadingScreen.js +156 -0
  72. package/lib/commonjs/components/PersonaLoadingScreen.js.map +1 -0
  73. package/lib/commonjs/components/PersonalizationConsentScreen.js +316 -0
  74. package/lib/commonjs/components/PersonalizationConsentScreen.js.map +1 -0
  75. package/lib/commonjs/components/PinCreationScreen.js +393 -0
  76. package/lib/commonjs/components/PinCreationScreen.js.map +1 -0
  77. package/lib/commonjs/components/PinInput.js +282 -120
  78. package/lib/commonjs/components/PinInput.js.map +1 -1
  79. package/lib/commonjs/components/PlatformConnectorsStep.js +828 -0
  80. package/lib/commonjs/components/PlatformConnectorsStep.js.map +1 -0
  81. package/lib/commonjs/components/PlatformToggle.js +180 -0
  82. package/lib/commonjs/components/PlatformToggle.js.map +1 -0
  83. package/lib/commonjs/components/PrimaryButton.js +180 -0
  84. package/lib/commonjs/components/PrimaryButton.js.map +1 -0
  85. package/lib/commonjs/components/SignInMatchAnimation.js +197 -0
  86. package/lib/commonjs/components/SignInMatchAnimation.js.map +1 -0
  87. package/lib/commonjs/components/SignInStep.js +179 -0
  88. package/lib/commonjs/components/SignInStep.js.map +1 -0
  89. package/lib/commonjs/components/TrainingModal.js +808 -563
  90. package/lib/commonjs/components/TrainingModal.js.map +1 -1
  91. package/lib/commonjs/components/UniversalOnboarding.js +2304 -1283
  92. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
  93. package/lib/commonjs/components/VerificationStep.js +154 -0
  94. package/lib/commonjs/components/VerificationStep.js.map +1 -0
  95. package/lib/commonjs/components/WelcomeScreen.js +385 -0
  96. package/lib/commonjs/components/WelcomeScreen.js.map +1 -0
  97. package/lib/commonjs/components/icons/Basicproficon.js +37 -0
  98. package/lib/commonjs/components/icons/Basicproficon.js.map +1 -0
  99. package/lib/commonjs/components/icons/Basicprofile.js +21 -0
  100. package/lib/commonjs/components/icons/Basicprofile.js.map +1 -0
  101. package/lib/commonjs/components/icons/Checkbox.js +21 -0
  102. package/lib/commonjs/components/icons/Checkbox.js.map +1 -0
  103. package/lib/commonjs/components/icons/Checkmark.js +27 -0
  104. package/lib/commonjs/components/icons/Checkmark.js.map +1 -0
  105. package/lib/commonjs/components/icons/Contentanalysis.js +21 -0
  106. package/lib/commonjs/components/icons/Contentanalysis.js.map +1 -0
  107. package/lib/commonjs/components/icons/Contenticon.js +39 -0
  108. package/lib/commonjs/components/icons/Contenticon.js.map +1 -0
  109. package/lib/commonjs/components/icons/EnochE.js +41 -0
  110. package/lib/commonjs/components/icons/EnochE.js.map +1 -0
  111. package/lib/commonjs/components/icons/Personalityicon.js +30 -0
  112. package/lib/commonjs/components/icons/Personalityicon.js.map +1 -0
  113. package/lib/commonjs/components/icons/Personalityprofile.js +21 -0
  114. package/lib/commonjs/components/icons/Personalityprofile.js.map +1 -0
  115. package/lib/commonjs/components/icons/Personalitytraits.js +21 -0
  116. package/lib/commonjs/components/icons/Personalitytraits.js.map +1 -0
  117. package/lib/commonjs/components/icons/Userpreferences.js +21 -0
  118. package/lib/commonjs/components/icons/Userpreferences.js.map +1 -0
  119. package/lib/commonjs/components/icons/index.js +84 -0
  120. package/lib/commonjs/components/icons/index.js.map +1 -0
  121. package/lib/commonjs/components/onboarding/OAuthWebView.js +134 -743
  122. package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -1
  123. package/lib/commonjs/config/api.js +34 -0
  124. package/lib/commonjs/config/api.js.map +1 -0
  125. package/lib/commonjs/context/AuthContext.js +345 -0
  126. package/lib/commonjs/context/AuthContext.js.map +1 -0
  127. package/lib/commonjs/hooks/useConnectedAccounts.js +111 -0
  128. package/lib/commonjs/hooks/useConnectedAccounts.js.map +1 -0
  129. package/lib/commonjs/hooks/useConnections.js +120 -125
  130. package/lib/commonjs/hooks/useConnections.js.map +1 -1
  131. package/lib/commonjs/hooks/useUserConnections.js +148 -0
  132. package/lib/commonjs/hooks/useUserConnections.js.map +1 -0
  133. package/lib/commonjs/index.js +149 -27
  134. package/lib/commonjs/index.js.map +1 -1
  135. package/lib/commonjs/services/apiClient.js +302 -0
  136. package/lib/commonjs/services/apiClient.js.map +1 -0
  137. package/lib/commonjs/services/apiKeyService.js +8 -9
  138. package/lib/commonjs/services/apiKeyService.js.map +1 -1
  139. package/lib/commonjs/services/authService.js +935 -0
  140. package/lib/commonjs/services/authService.js.map +1 -0
  141. package/lib/commonjs/services/biometricPinService.js +184 -0
  142. package/lib/commonjs/services/biometricPinService.js.map +1 -0
  143. package/lib/commonjs/services/connectedAccountsService.js +268 -0
  144. package/lib/commonjs/services/connectedAccountsService.js.map +1 -0
  145. package/lib/commonjs/services/googleAuthService.js +268 -0
  146. package/lib/commonjs/services/googleAuthService.js.map +1 -0
  147. package/lib/commonjs/services/imageCompressionService.js +260 -0
  148. package/lib/commonjs/services/imageCompressionService.js.map +1 -0
  149. package/lib/commonjs/services/jwtStorageService.js +256 -0
  150. package/lib/commonjs/services/jwtStorageService.js.map +1 -0
  151. package/lib/commonjs/services/mobileTrainingService.js +185 -0
  152. package/lib/commonjs/services/mobileTrainingService.js.map +1 -0
  153. package/lib/commonjs/services/pinEncryptionService.js +84 -0
  154. package/lib/commonjs/services/pinEncryptionService.js.map +1 -0
  155. package/lib/commonjs/services/pinStorageUtils.js +105 -0
  156. package/lib/commonjs/services/pinStorageUtils.js.map +1 -0
  157. package/lib/commonjs/services/platformAuthService.js +956 -722
  158. package/lib/commonjs/services/platformAuthService.js.map +1 -1
  159. package/lib/commonjs/services/storageService.js +404 -0
  160. package/lib/commonjs/services/storageService.js.map +1 -0
  161. package/lib/commonjs/services/trainingApiHelpers.js +73 -0
  162. package/lib/commonjs/services/trainingApiHelpers.js.map +1 -0
  163. package/lib/commonjs/services/userConnectionsService.js +486 -0
  164. package/lib/commonjs/services/userConnectionsService.js.map +1 -0
  165. package/lib/commonjs/services/youtubeMigrationService.js +415 -0
  166. package/lib/commonjs/services/youtubeMigrationService.js.map +1 -0
  167. package/lib/commonjs/theme/index.js +249 -0
  168. package/lib/commonjs/theme/index.js.map +1 -0
  169. package/lib/commonjs/utils/eventUtils.js +288 -0
  170. package/lib/commonjs/utils/eventUtils.js.map +1 -0
  171. package/lib/commonjs/utils/haptics.js +66 -0
  172. package/lib/commonjs/utils/haptics.js.map +1 -0
  173. package/lib/commonjs/utils/imagePreloader.js +6 -0
  174. package/lib/commonjs/utils/imagePreloader.js.map +1 -0
  175. package/lib/module/api/index.js +72 -0
  176. package/lib/module/api/index.js.map +1 -1
  177. package/lib/module/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  178. package/lib/module/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  179. package/lib/module/assets/icons/Facebookicon.png +0 -0
  180. package/lib/module/assets/icons/Gmail.png +0 -0
  181. package/lib/module/assets/icons/Linkedinicon.png +0 -0
  182. package/lib/module/assets/icons/Redditicon.png +0 -0
  183. package/lib/module/assets/icons/YouTubeicon2.png +0 -0
  184. package/lib/module/assets/icons/YouTubeicon3.png +0 -0
  185. package/lib/module/assets/icons/farcaster.png +0 -0
  186. package/lib/module/assets/icons/instagram.png +0 -0
  187. package/lib/module/assets/icons/pinterest.png +0 -0
  188. package/lib/module/assets/icons/swerv_logo.png +0 -0
  189. package/lib/module/assets/icons/twitter.jpg +0 -0
  190. package/lib/module/assets/images/Checkbox.svg +3 -0
  191. package/lib/module/assets/images/EnochE.svg +19 -0
  192. package/lib/module/assets/images/Enochicon1.png +0 -0
  193. package/lib/module/assets/images/Face_ID_logo.png +0 -0
  194. package/lib/module/assets/images/Facebookicon.png +0 -0
  195. package/lib/module/assets/images/Gmail.png +0 -0
  196. package/lib/module/assets/images/Googlelogo.png +0 -0
  197. package/lib/module/assets/images/Linkedinicon.png +0 -0
  198. package/lib/module/assets/images/Onairoslogo.png +0 -0
  199. package/lib/module/assets/images/Personalityprofile.svg +3 -0
  200. package/lib/module/assets/images/Personalitytraits.svg +3 -0
  201. package/lib/module/assets/images/Redditicon.png +0 -0
  202. package/lib/module/assets/images/Userpreferences.svg +3 -0
  203. package/lib/module/assets/images/YouTubeicon3.png +0 -0
  204. package/lib/module/assets/images/arrow.svg +20 -0
  205. package/lib/module/assets/images/basicproficon.svg +43 -0
  206. package/lib/module/assets/images/basicprofile.svg +3 -0
  207. package/lib/module/assets/images/checkmark.svg +4 -0
  208. package/lib/module/assets/images/contentanalysis.svg +3 -0
  209. package/lib/module/assets/images/contenticon.svg +23 -0
  210. package/lib/module/assets/images/persona1.png +0 -0
  211. package/lib/module/assets/images/persona2.png +0 -0
  212. package/lib/module/assets/images/persona3.png +0 -0
  213. package/lib/module/assets/images/persona4.png +0 -0
  214. package/lib/module/assets/images/persona5.png +0 -0
  215. package/lib/module/assets/images/personalityicon.svg +18 -0
  216. package/lib/module/assets/images/x-close.svg +3 -0
  217. package/lib/module/components/BodyText.js +20 -0
  218. package/lib/module/components/BodyText.js.map +1 -0
  219. package/lib/module/components/BrandMark.js +37 -0
  220. package/lib/module/components/BrandMark.js.map +1 -0
  221. package/lib/module/components/CodeInput.js +23 -0
  222. package/lib/module/components/CodeInput.js.map +1 -0
  223. package/lib/module/components/EmailInput.js +23 -0
  224. package/lib/module/components/EmailInput.js.map +1 -0
  225. package/lib/module/components/ExistingUserDataConfirmation.js +465 -0
  226. package/lib/module/components/ExistingUserDataConfirmation.js.map +1 -0
  227. package/lib/module/components/GoogleButton.js +48 -0
  228. package/lib/module/components/GoogleButton.js.map +1 -0
  229. package/lib/module/components/HeadingGroup.js +36 -0
  230. package/lib/module/components/HeadingGroup.js.map +1 -0
  231. package/lib/module/components/ModalHeader.js +92 -0
  232. package/lib/module/components/ModalHeader.js.map +1 -0
  233. package/lib/module/components/ModalSheet.js +34 -0
  234. package/lib/module/components/ModalSheet.js.map +1 -0
  235. package/lib/module/components/Onairos.js +1 -3
  236. package/lib/module/components/Onairos.js.map +1 -1
  237. package/lib/module/components/OnairosButton.js +172 -192
  238. package/lib/module/components/OnairosButton.js.map +1 -1
  239. package/lib/module/components/OnairosSignInButton.js +160 -0
  240. package/lib/module/components/OnairosSignInButton.js.map +1 -0
  241. package/lib/module/components/Overlay.js +5 -5
  242. package/lib/module/components/Overlay.js.map +1 -1
  243. package/lib/module/components/PersonaImage.js +53 -0
  244. package/lib/module/components/PersonaImage.js.map +1 -0
  245. package/lib/module/components/PersonaLoadingScreen.js +148 -0
  246. package/lib/module/components/PersonaLoadingScreen.js.map +1 -0
  247. package/lib/module/components/PersonalizationConsentScreen.js +309 -0
  248. package/lib/module/components/PersonalizationConsentScreen.js.map +1 -0
  249. package/lib/module/components/PinCreationScreen.js +386 -0
  250. package/lib/module/components/PinCreationScreen.js.map +1 -0
  251. package/lib/module/components/PinInput.js +283 -120
  252. package/lib/module/components/PinInput.js.map +1 -1
  253. package/lib/module/components/PlatformConnectorsStep.js +820 -0
  254. package/lib/module/components/PlatformConnectorsStep.js.map +1 -0
  255. package/lib/module/components/PlatformToggle.js +173 -0
  256. package/lib/module/components/PlatformToggle.js.map +1 -0
  257. package/lib/module/components/PrimaryButton.js +172 -0
  258. package/lib/module/components/PrimaryButton.js.map +1 -0
  259. package/lib/module/components/SignInMatchAnimation.js +189 -0
  260. package/lib/module/components/SignInMatchAnimation.js.map +1 -0
  261. package/lib/module/components/SignInStep.js +171 -0
  262. package/lib/module/components/SignInStep.js.map +1 -0
  263. package/lib/module/components/TrainingModal.js +809 -565
  264. package/lib/module/components/TrainingModal.js.map +1 -1
  265. package/lib/module/components/UniversalOnboarding.js +2307 -1284
  266. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  267. package/lib/module/components/VerificationStep.js +146 -0
  268. package/lib/module/components/VerificationStep.js.map +1 -0
  269. package/lib/module/components/WelcomeScreen.js +378 -0
  270. package/lib/module/components/WelcomeScreen.js.map +1 -0
  271. package/lib/module/components/icons/Basicproficon.js +30 -0
  272. package/lib/module/components/icons/Basicproficon.js.map +1 -0
  273. package/lib/module/components/icons/Basicprofile.js +14 -0
  274. package/lib/module/components/icons/Basicprofile.js.map +1 -0
  275. package/lib/module/components/icons/Checkbox.js +14 -0
  276. package/lib/module/components/icons/Checkbox.js.map +1 -0
  277. package/lib/module/components/icons/Checkmark.js +20 -0
  278. package/lib/module/components/icons/Checkmark.js.map +1 -0
  279. package/lib/module/components/icons/Contentanalysis.js +14 -0
  280. package/lib/module/components/icons/Contentanalysis.js.map +1 -0
  281. package/lib/module/components/icons/Contenticon.js +32 -0
  282. package/lib/module/components/icons/Contenticon.js.map +1 -0
  283. package/lib/module/components/icons/EnochE.js +34 -0
  284. package/lib/module/components/icons/EnochE.js.map +1 -0
  285. package/lib/module/components/icons/Personalityicon.js +23 -0
  286. package/lib/module/components/icons/Personalityicon.js.map +1 -0
  287. package/lib/module/components/icons/Personalityprofile.js +14 -0
  288. package/lib/module/components/icons/Personalityprofile.js.map +1 -0
  289. package/lib/module/components/icons/Personalitytraits.js +14 -0
  290. package/lib/module/components/icons/Personalitytraits.js.map +1 -0
  291. package/lib/module/components/icons/Userpreferences.js +14 -0
  292. package/lib/module/components/icons/Userpreferences.js.map +1 -0
  293. package/lib/module/components/icons/index.js +13 -0
  294. package/lib/module/components/icons/index.js.map +1 -0
  295. package/lib/module/components/onboarding/OAuthWebView.js +136 -744
  296. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -1
  297. package/lib/module/config/api.js +26 -0
  298. package/lib/module/config/api.js.map +1 -0
  299. package/lib/module/context/AuthContext.js +335 -0
  300. package/lib/module/context/AuthContext.js.map +1 -0
  301. package/lib/module/hooks/useConnectedAccounts.js +106 -0
  302. package/lib/module/hooks/useConnectedAccounts.js.map +1 -0
  303. package/lib/module/hooks/useConnections.js +119 -125
  304. package/lib/module/hooks/useConnections.js.map +1 -1
  305. package/lib/module/hooks/useUserConnections.js +140 -0
  306. package/lib/module/hooks/useUserConnections.js.map +1 -0
  307. package/lib/module/index.js +51 -15
  308. package/lib/module/index.js.map +1 -1
  309. package/lib/module/services/apiClient.js +298 -0
  310. package/lib/module/services/apiClient.js.map +1 -0
  311. package/lib/module/services/apiKeyService.js +8 -9
  312. package/lib/module/services/apiKeyService.js.map +1 -1
  313. package/lib/module/services/authService.js +905 -0
  314. package/lib/module/services/authService.js.map +1 -0
  315. package/lib/module/services/biometricPinService.js +173 -0
  316. package/lib/module/services/biometricPinService.js.map +1 -0
  317. package/lib/module/services/connectedAccountsService.js +255 -0
  318. package/lib/module/services/connectedAccountsService.js.map +1 -0
  319. package/lib/module/services/googleAuthService.js +258 -0
  320. package/lib/module/services/googleAuthService.js.map +1 -0
  321. package/lib/module/services/imageCompressionService.js +250 -0
  322. package/lib/module/services/imageCompressionService.js.map +1 -0
  323. package/lib/module/services/jwtStorageService.js +239 -0
  324. package/lib/module/services/jwtStorageService.js.map +1 -0
  325. package/lib/module/services/mobileTrainingService.js +172 -0
  326. package/lib/module/services/mobileTrainingService.js.map +1 -0
  327. package/lib/module/services/pinEncryptionService.js +75 -0
  328. package/lib/module/services/pinEncryptionService.js.map +1 -0
  329. package/lib/module/services/pinStorageUtils.js +93 -0
  330. package/lib/module/services/pinStorageUtils.js.map +1 -0
  331. package/lib/module/services/platformAuthService.js +943 -704
  332. package/lib/module/services/platformAuthService.js.map +1 -1
  333. package/lib/module/services/storageService.js +383 -0
  334. package/lib/module/services/storageService.js.map +1 -0
  335. package/lib/module/services/trainingApiHelpers.js +67 -0
  336. package/lib/module/services/trainingApiHelpers.js.map +1 -0
  337. package/lib/module/services/userConnectionsService.js +476 -0
  338. package/lib/module/services/userConnectionsService.js.map +1 -0
  339. package/lib/module/services/youtubeMigrationService.js +404 -0
  340. package/lib/module/services/youtubeMigrationService.js.map +1 -0
  341. package/lib/module/theme/index.js +244 -0
  342. package/lib/module/theme/index.js.map +1 -0
  343. package/lib/module/utils/eventUtils.js +270 -0
  344. package/lib/module/utils/eventUtils.js.map +1 -0
  345. package/lib/module/utils/haptics.js +59 -0
  346. package/lib/module/utils/haptics.js.map +1 -0
  347. package/lib/module/utils/imagePreloader.js +3 -0
  348. package/lib/module/utils/imagePreloader.js.map +1 -0
  349. package/lib/typescript/api/index.d.ts +8 -0
  350. package/lib/typescript/api/index.d.ts.map +1 -1
  351. package/lib/typescript/components/BodyText.d.ts +10 -0
  352. package/lib/typescript/components/BodyText.d.ts.map +1 -0
  353. package/lib/typescript/components/BrandMark.d.ts +11 -0
  354. package/lib/typescript/components/BrandMark.d.ts.map +1 -0
  355. package/lib/typescript/components/CodeInput.d.ts +10 -0
  356. package/lib/typescript/components/CodeInput.d.ts.map +1 -0
  357. package/lib/typescript/components/EmailInput.d.ts +8 -0
  358. package/lib/typescript/components/EmailInput.d.ts.map +1 -0
  359. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts +12 -0
  360. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts.map +1 -0
  361. package/lib/typescript/components/GoogleButton.d.ts +11 -0
  362. package/lib/typescript/components/GoogleButton.d.ts.map +1 -0
  363. package/lib/typescript/components/HeadingGroup.d.ts +11 -0
  364. package/lib/typescript/components/HeadingGroup.d.ts.map +1 -0
  365. package/lib/typescript/components/ModalHeader.d.ts +11 -0
  366. package/lib/typescript/components/ModalHeader.d.ts.map +1 -0
  367. package/lib/typescript/components/ModalSheet.d.ts +13 -0
  368. package/lib/typescript/components/ModalSheet.d.ts.map +1 -0
  369. package/lib/typescript/components/Onairos.d.ts.map +1 -1
  370. package/lib/typescript/components/OnairosButton.d.ts +29 -4
  371. package/lib/typescript/components/OnairosButton.d.ts.map +1 -1
  372. package/lib/typescript/components/OnairosSignInButton.d.ts +14 -0
  373. package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -0
  374. package/lib/typescript/components/PersonaImage.d.ts +8 -0
  375. package/lib/typescript/components/PersonaImage.d.ts.map +1 -0
  376. package/lib/typescript/components/PersonaLoadingScreen.d.ts +10 -0
  377. package/lib/typescript/components/PersonaLoadingScreen.d.ts.map +1 -0
  378. package/lib/typescript/components/PersonalizationConsentScreen.d.ts +10 -0
  379. package/lib/typescript/components/PersonalizationConsentScreen.d.ts.map +1 -0
  380. package/lib/typescript/components/PinCreationScreen.d.ts +10 -0
  381. package/lib/typescript/components/PinCreationScreen.d.ts.map +1 -0
  382. package/lib/typescript/components/PinInput.d.ts +11 -1
  383. package/lib/typescript/components/PinInput.d.ts.map +1 -1
  384. package/lib/typescript/components/PlatformConnectorsStep.d.ts +11 -0
  385. package/lib/typescript/components/PlatformConnectorsStep.d.ts.map +1 -0
  386. package/lib/typescript/components/PlatformToggle.d.ts +20 -0
  387. package/lib/typescript/components/PlatformToggle.d.ts.map +1 -0
  388. package/lib/typescript/components/PrimaryButton.d.ts +22 -0
  389. package/lib/typescript/components/PrimaryButton.d.ts.map +1 -0
  390. package/lib/typescript/components/SignInMatchAnimation.d.ts +9 -0
  391. package/lib/typescript/components/SignInMatchAnimation.d.ts.map +1 -0
  392. package/lib/typescript/components/SignInStep.d.ts +12 -0
  393. package/lib/typescript/components/SignInStep.d.ts.map +1 -0
  394. package/lib/typescript/components/TrainingModal.d.ts +12 -1
  395. package/lib/typescript/components/TrainingModal.d.ts.map +1 -1
  396. package/lib/typescript/components/UniversalOnboarding.d.ts +14 -1
  397. package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
  398. package/lib/typescript/components/VerificationStep.d.ts +13 -0
  399. package/lib/typescript/components/VerificationStep.d.ts.map +1 -0
  400. package/lib/typescript/components/WelcomeScreen.d.ts +9 -0
  401. package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -0
  402. package/lib/typescript/components/icons/Basicproficon.d.ts +5 -0
  403. package/lib/typescript/components/icons/Basicproficon.d.ts.map +1 -0
  404. package/lib/typescript/components/icons/Basicprofile.d.ts +5 -0
  405. package/lib/typescript/components/icons/Basicprofile.d.ts.map +1 -0
  406. package/lib/typescript/components/icons/Checkbox.d.ts +5 -0
  407. package/lib/typescript/components/icons/Checkbox.d.ts.map +1 -0
  408. package/lib/typescript/components/icons/Checkmark.d.ts +5 -0
  409. package/lib/typescript/components/icons/Checkmark.d.ts.map +1 -0
  410. package/lib/typescript/components/icons/Contentanalysis.d.ts +5 -0
  411. package/lib/typescript/components/icons/Contentanalysis.d.ts.map +1 -0
  412. package/lib/typescript/components/icons/Contenticon.d.ts +5 -0
  413. package/lib/typescript/components/icons/Contenticon.d.ts.map +1 -0
  414. package/lib/typescript/components/icons/EnochE.d.ts +5 -0
  415. package/lib/typescript/components/icons/EnochE.d.ts.map +1 -0
  416. package/lib/typescript/components/icons/Personalityicon.d.ts +5 -0
  417. package/lib/typescript/components/icons/Personalityicon.d.ts.map +1 -0
  418. package/lib/typescript/components/icons/Personalityprofile.d.ts +5 -0
  419. package/lib/typescript/components/icons/Personalityprofile.d.ts.map +1 -0
  420. package/lib/typescript/components/icons/Personalitytraits.d.ts +5 -0
  421. package/lib/typescript/components/icons/Personalitytraits.d.ts.map +1 -0
  422. package/lib/typescript/components/icons/Userpreferences.d.ts +5 -0
  423. package/lib/typescript/components/icons/Userpreferences.d.ts.map +1 -0
  424. package/lib/typescript/components/icons/index.d.ts +12 -0
  425. package/lib/typescript/components/icons/index.d.ts.map +1 -0
  426. package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +1 -1
  427. package/lib/typescript/config/api.d.ts +24 -0
  428. package/lib/typescript/config/api.d.ts.map +1 -0
  429. package/lib/typescript/context/AuthContext.d.ts +34 -0
  430. package/lib/typescript/context/AuthContext.d.ts.map +1 -0
  431. package/lib/typescript/hooks/useConnectedAccounts.d.ts +11 -0
  432. package/lib/typescript/hooks/useConnectedAccounts.d.ts.map +1 -0
  433. package/lib/typescript/hooks/useConnections.d.ts +10 -5
  434. package/lib/typescript/hooks/useConnections.d.ts.map +1 -1
  435. package/lib/typescript/hooks/useUserConnections.d.ts +12 -0
  436. package/lib/typescript/hooks/useUserConnections.d.ts.map +1 -0
  437. package/lib/typescript/index.d.ts +24 -6
  438. package/lib/typescript/index.d.ts.map +1 -1
  439. package/lib/typescript/services/apiClient.d.ts +91 -0
  440. package/lib/typescript/services/apiClient.d.ts.map +1 -0
  441. package/lib/typescript/services/apiKeyService.d.ts.map +1 -1
  442. package/lib/typescript/services/authService.d.ts +216 -0
  443. package/lib/typescript/services/authService.d.ts.map +1 -0
  444. package/lib/typescript/services/biometricPinService.d.ts +29 -0
  445. package/lib/typescript/services/biometricPinService.d.ts.map +1 -0
  446. package/lib/typescript/services/connectedAccountsService.d.ts +56 -0
  447. package/lib/typescript/services/connectedAccountsService.d.ts.map +1 -0
  448. package/lib/typescript/services/googleAuthService.d.ts +63 -0
  449. package/lib/typescript/services/googleAuthService.d.ts.map +1 -0
  450. package/lib/typescript/services/imageCompressionService.d.ts +37 -0
  451. package/lib/typescript/services/imageCompressionService.d.ts.map +1 -0
  452. package/lib/typescript/services/jwtStorageService.d.ts +86 -0
  453. package/lib/typescript/services/jwtStorageService.d.ts.map +1 -0
  454. package/lib/typescript/services/mobileTrainingService.d.ts +45 -0
  455. package/lib/typescript/services/mobileTrainingService.d.ts.map +1 -0
  456. package/lib/typescript/services/pinEncryptionService.d.ts +17 -0
  457. package/lib/typescript/services/pinEncryptionService.d.ts.map +1 -0
  458. package/lib/typescript/services/pinStorageUtils.d.ts +25 -0
  459. package/lib/typescript/services/pinStorageUtils.d.ts.map +1 -0
  460. package/lib/typescript/services/platformAuthService.d.ts +34 -109
  461. package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
  462. package/lib/typescript/services/storageService.d.ts +128 -0
  463. package/lib/typescript/services/storageService.d.ts.map +1 -0
  464. package/lib/typescript/services/trainingApiHelpers.d.ts +38 -0
  465. package/lib/typescript/services/trainingApiHelpers.d.ts.map +1 -0
  466. package/lib/typescript/services/userConnectionsService.d.ts +90 -0
  467. package/lib/typescript/services/userConnectionsService.d.ts.map +1 -0
  468. package/lib/typescript/services/youtubeMigrationService.d.ts +12 -0
  469. package/lib/typescript/services/youtubeMigrationService.d.ts.map +1 -0
  470. package/lib/typescript/theme/index.d.ts +416 -0
  471. package/lib/typescript/theme/index.d.ts.map +1 -0
  472. package/lib/typescript/types/index.d.ts +39 -0
  473. package/lib/typescript/types/index.d.ts.map +1 -1
  474. package/lib/typescript/utils/eventUtils.d.ts +108 -0
  475. package/lib/typescript/utils/eventUtils.d.ts.map +1 -0
  476. package/lib/typescript/utils/haptics.d.ts +11 -0
  477. package/lib/typescript/utils/haptics.d.ts.map +1 -0
  478. package/lib/typescript/utils/imagePreloader.d.ts +2 -0
  479. package/lib/typescript/utils/imagePreloader.d.ts.map +1 -0
  480. package/package.json +158 -145
  481. package/src/api/index.ts +41 -0
  482. package/src/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  483. package/src/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  484. package/src/assets/icons/Facebookicon.png +0 -0
  485. package/src/assets/icons/Gmail.png +0 -0
  486. package/src/assets/icons/Linkedinicon.png +0 -0
  487. package/src/assets/icons/Redditicon.png +0 -0
  488. package/src/assets/icons/YouTubeicon2.png +0 -0
  489. package/src/assets/icons/YouTubeicon3.png +0 -0
  490. package/src/assets/icons/farcaster.png +0 -0
  491. package/src/assets/icons/instagram.png +0 -0
  492. package/src/assets/icons/pinterest.png +0 -0
  493. package/src/assets/icons/swerv_logo.png +0 -0
  494. package/src/assets/icons/twitter.jpg +0 -0
  495. package/src/assets/images/Checkbox.svg +3 -0
  496. package/src/assets/images/EnochE.svg +19 -0
  497. package/src/assets/images/Enochicon1.png +0 -0
  498. package/src/assets/images/Face_ID_logo.png +0 -0
  499. package/src/assets/images/Facebookicon.png +0 -0
  500. package/src/assets/images/Gmail.png +0 -0
  501. package/src/assets/images/Googlelogo.png +0 -0
  502. package/src/assets/images/Linkedinicon.png +0 -0
  503. package/src/assets/images/Onairoslogo.png +0 -0
  504. package/src/assets/images/Personalityprofile.svg +3 -0
  505. package/src/assets/images/Personalitytraits.svg +3 -0
  506. package/src/assets/images/Redditicon.png +0 -0
  507. package/src/assets/images/Userpreferences.svg +3 -0
  508. package/src/assets/images/YouTubeicon3.png +0 -0
  509. package/src/assets/images/arrow.svg +20 -0
  510. package/src/assets/images/basicproficon.svg +43 -0
  511. package/src/assets/images/basicprofile.svg +3 -0
  512. package/src/assets/images/checkmark.svg +4 -0
  513. package/src/assets/images/contentanalysis.svg +3 -0
  514. package/src/assets/images/contenticon.svg +23 -0
  515. package/src/assets/images/persona1.png +0 -0
  516. package/src/assets/images/persona2.png +0 -0
  517. package/src/assets/images/persona3.png +0 -0
  518. package/src/assets/images/persona4.png +0 -0
  519. package/src/assets/images/persona5.png +0 -0
  520. package/src/assets/images/personalityicon.svg +18 -0
  521. package/src/assets/images/x-close.svg +3 -0
  522. package/src/components/BodyText.tsx +33 -0
  523. package/src/components/BrandMark.tsx +62 -0
  524. package/src/components/CodeInput.tsx +32 -0
  525. package/src/components/EmailInput.tsx +31 -0
  526. package/src/components/ExistingUserDataConfirmation.tsx +507 -0
  527. package/src/components/GoogleButton.tsx +55 -0
  528. package/src/components/HeadingGroup.tsx +49 -0
  529. package/src/components/ModalHeader.tsx +125 -0
  530. package/src/components/ModalSheet.tsx +57 -0
  531. package/src/components/Onairos.tsx +422 -424
  532. package/src/components/OnairosButton.tsx +339 -359
  533. package/src/components/OnairosSignInButton.tsx +166 -0
  534. package/src/components/Overlay.tsx +506 -506
  535. package/src/components/PersonaImage.tsx +79 -0
  536. package/src/components/PersonaLoadingScreen.tsx +201 -0
  537. package/src/components/PersonalizationConsentScreen.tsx +410 -0
  538. package/src/components/PinCreationScreen.tsx +492 -0
  539. package/src/components/PinInput.tsx +555 -343
  540. package/src/components/PlatformConnectorsStep.tsx +892 -0
  541. package/src/components/PlatformToggle.tsx +226 -0
  542. package/src/components/PrimaryButton.tsx +214 -0
  543. package/src/components/SignInMatchAnimation.tsx +225 -0
  544. package/src/components/SignInStep.tsx +217 -0
  545. package/src/components/TrainingModal.tsx +1047 -737
  546. package/src/components/UniversalOnboarding.tsx +2888 -1820
  547. package/src/components/VerificationStep.tsx +198 -0
  548. package/src/components/WelcomeScreen.tsx +473 -0
  549. package/src/components/icons/Basicproficon.tsx +30 -0
  550. package/src/components/icons/Basicprofile.tsx +17 -0
  551. package/src/components/icons/Checkbox.tsx +17 -0
  552. package/src/components/icons/Checkmark.tsx +24 -0
  553. package/src/components/icons/Contentanalysis.tsx +17 -0
  554. package/src/components/icons/Contenticon.tsx +30 -0
  555. package/src/components/icons/EnochE.tsx +39 -0
  556. package/src/components/icons/Personalityicon.tsx +22 -0
  557. package/src/components/icons/Personalityprofile.tsx +17 -0
  558. package/src/components/icons/Personalitytraits.tsx +17 -0
  559. package/src/components/icons/Userpreferences.tsx +17 -0
  560. package/src/components/icons/index.ts +12 -0
  561. package/src/components/onboarding/OAuthWebView.tsx +232 -838
  562. package/src/config/api.ts +25 -0
  563. package/src/context/AuthContext.tsx +393 -0
  564. package/src/hooks/useConnectedAccounts.ts +139 -0
  565. package/src/hooks/useConnections.ts +129 -131
  566. package/src/hooks/useUserConnections.ts +166 -0
  567. package/src/index.ts +94 -49
  568. package/src/services/apiClient.ts +337 -0
  569. package/src/services/apiKeyService.ts +9 -11
  570. package/src/services/authService.ts +1008 -0
  571. package/src/services/biometricPinService.ts +193 -0
  572. package/src/services/connectedAccountsService.ts +290 -0
  573. package/src/services/googleAuthService.ts +279 -0
  574. package/src/services/imageCompressionService.ts +303 -0
  575. package/src/services/jwtStorageService.ts +257 -0
  576. package/src/services/mobileTrainingService.ts +204 -0
  577. package/src/services/pinEncryptionService.ts +76 -0
  578. package/src/services/pinStorageUtils.ts +97 -0
  579. package/src/services/platformAuthService.ts +1346 -1113
  580. package/src/services/storageService.ts +452 -0
  581. package/src/services/trainingApiHelpers.ts +67 -0
  582. package/src/services/userConnectionsService.ts +557 -0
  583. package/src/services/youtubeMigrationService.ts +454 -0
  584. package/src/theme/index.ts +239 -0
  585. package/src/types/index.ts +265 -238
  586. package/src/utils/eventUtils.ts +303 -0
  587. package/src/utils/haptics.ts +59 -0
  588. package/src/utils/imagePreloader.ts +2 -0
  589. package/README.md +0 -375
  590. package/lib/commonjs/assets/images/email.png +0 -0
  591. package/lib/commonjs/assets/images/linkedin.png +0 -0
  592. package/lib/commonjs/assets/images/reddit.png +0 -0
  593. package/lib/commonjs/assets/images/youtube.png +0 -0
  594. package/lib/commonjs/components/UniversalOnboarding.tsx.new +0 -455
  595. package/lib/module/assets/images/email.png +0 -0
  596. package/lib/module/assets/images/linkedin.png +0 -0
  597. package/lib/module/assets/images/reddit.png +0 -0
  598. package/lib/module/assets/images/youtube.png +0 -0
  599. package/lib/module/components/UniversalOnboarding.tsx.new +0 -455
  600. package/src/assets/images/email.png +0 -0
  601. package/src/assets/images/linkedin.png +0 -0
  602. package/src/assets/images/reddit.png +0 -0
  603. package/src/assets/images/youtube.png +0 -0
  604. package/src/components/UniversalOnboarding.tsx.new +0 -455
@@ -1,506 +1,506 @@
1
- import React, { useState, useEffect, useCallback, useRef } from 'react';
2
- import {
3
- View,
4
- Text,
5
- StyleSheet,
6
- TouchableOpacity,
7
- ScrollView,
8
- Alert,
9
- Platform,
10
- Dimensions,
11
- Modal,
12
- Animated,
13
- TouchableWithoutFeedback,
14
- SafeAreaView,
15
- Image,
16
- Switch,
17
- } from 'react-native';
18
- import Icon from 'react-native-vector-icons/MaterialIcons';
19
- import { onairosApi } from '../api';
20
- import { encryptModelKey } from '../utils/encryption';
21
- import { COLORS } from '../constants';
22
-
23
- const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window');
24
-
25
- import type { OverlayProps } from '../types';
26
-
27
- export const Overlay: React.FC<OverlayProps> = ({
28
- data,
29
- username,
30
- modelKey,
31
- onResolved,
32
- appName = 'Your App',
33
- darkMode = false,
34
- platforms = [
35
- { id: 'instagram', name: 'Instagram', icon: require('../assets/images/instagram.png') },
36
- { id: 'youtube', name: 'YouTube', icon: require('../assets/images/youtube.png') },
37
- { id: 'reddit', name: 'Reddit', icon: require('../assets/images/reddit.png') },
38
- { id: 'pinterest', name: 'Pinterest', icon: require('../assets/images/pinterest.png') },
39
- { id: 'email', name: 'Email', icon: require('../assets/images/email.png') },
40
- ],
41
- }) => {
42
- const [selections, setSelections] = useState<{ [key: string]: boolean }>({});
43
- const [details, setDetails] = useState<string>('');
44
- const [visible, setVisible] = useState(true);
45
- const [platformToggles, setPlatformToggles] = useState<{[key: string]: boolean}>({});
46
- const bottomSheetAnim = useRef(new Animated.Value(0)).current;
47
-
48
- // Initialize selection state on mount
49
- useEffect(() => {
50
- // Initialize selection state
51
- const initialSelections: { [key: string]: boolean } = {};
52
- Object.keys(data).forEach((key) => {
53
- initialSelections[key] = false;
54
- });
55
- setSelections(initialSelections);
56
-
57
- // Initialize platform toggles
58
- const initialToggles: { [key: string]: boolean } = {};
59
- platforms.forEach((platform) => {
60
- initialToggles[platform.id] = false;
61
- });
62
- setPlatformToggles(initialToggles);
63
-
64
- getDetails();
65
-
66
- // Animate the bottom sheet sliding up
67
- Animated.spring(bottomSheetAnim, {
68
- toValue: 1,
69
- useNativeDriver: true,
70
- bounciness: 0,
71
- }).start();
72
- }, []);
73
-
74
- const getDetails = async () => {
75
- try {
76
- // In Expo or development, use mock data
77
- if (__DEV__) {
78
- setDetails('Development mode - mock account info');
79
- return;
80
- }
81
-
82
- const response = await onairosApi.post('getAccountInfo', {
83
- Info: {
84
- username: username,
85
- },
86
- });
87
- // Handle response data properly based on API structure
88
- if (response && response.data) {
89
- const accountInfo = typeof response.data === 'object' && response.data.AccountInfo
90
- ? response.data.AccountInfo
91
- : `User: ${username}`;
92
- setDetails(accountInfo);
93
- } else {
94
- setDetails(`User: ${username}`);
95
- }
96
- } catch (e) {
97
- console.error('Error getting account info:', e);
98
- setDetails(`User: ${username}`);
99
- }
100
- };
101
-
102
- const closeOverlay = useCallback(() => {
103
- // Animate the overlay sliding down
104
- Animated.timing(bottomSheetAnim, {
105
- toValue: 0,
106
- duration: 250,
107
- useNativeDriver: true,
108
- }).start(() => {
109
- setVisible(false);
110
- });
111
- }, [bottomSheetAnim]);
112
-
113
- const togglePlatform = useCallback((platformId: string) => {
114
- setPlatformToggles(prev => ({
115
- ...prev,
116
- [platformId]: !prev[platformId]
117
- }));
118
- }, []);
119
-
120
- const confirmSelection = useCallback(async () => {
121
- try {
122
- // Mock app identifier
123
- const appId = Platform.select({
124
- ios: 'com.onairos.mock',
125
- android: 'com.onairos.mock',
126
- default: 'unknown'
127
- });
128
-
129
- // In development mode, use mock data
130
- if (__DEV__) {
131
- onResolved('https://api2.onairos.uk', 'mock-token', {
132
- username,
133
- selections,
134
- platforms: platformToggles
135
- });
136
- closeOverlay();
137
- return;
138
- }
139
-
140
- // Get server public key for encryption
141
- let serverPublicKey = 'mock-key';
142
- try {
143
- const keyResponse = await onairosApi.get('public/key');
144
- if (keyResponse && keyResponse.data && typeof keyResponse.data === 'object') {
145
- serverPublicKey = keyResponse.data.publicKey || 'mock-key';
146
- }
147
- } catch (e) {
148
- console.error('Error getting server public key:', e);
149
- }
150
-
151
- // Encrypt the model key - only if the function exists and server key is valid
152
- let encryptedModelKey = modelKey;
153
- if (typeof encryptModelKey === 'function' && serverPublicKey) {
154
- try {
155
- encryptedModelKey = encryptModelKey(serverPublicKey, modelKey);
156
- } catch (e) {
157
- console.error('Error encrypting model key:', e);
158
- }
159
- }
160
-
161
- const response = await onairosApi.post('getAPIUrlMobile', {
162
- Info: {
163
- storage: 'local',
164
- appId: appId,
165
- confirmations: selections,
166
- developerURL: 'devURL',
167
- EncryptedUserPin: encryptedModelKey,
168
- username: username,
169
- platforms: platformToggles
170
- },
171
- });
172
-
173
- if (response && response.data && response.data.APIUrl && response.data.token) {
174
- onResolved(response.data.APIUrl, response.data.token, {
175
- username,
176
- selections,
177
- platforms: platformToggles
178
- });
179
- closeOverlay();
180
- } else {
181
- // If response doesn't have expected format, use fallbacks
182
- onResolved('https://api2.onairos.uk', 'fallback-token', {
183
- username,
184
- selections,
185
- platforms: platformToggles
186
- });
187
- closeOverlay();
188
- }
189
- } catch (e) {
190
- console.error('Error confirming selection:', e);
191
- // In case of error, provide fallback (development mode)
192
- if (__DEV__) {
193
- onResolved('https://api2.onairos.uk', 'error-fallback-token', {
194
- username,
195
- selections,
196
- platforms: platformToggles,
197
- error: true
198
- });
199
- closeOverlay();
200
- } else {
201
- showErrorModal('Failed to confirm selection. Please try again.');
202
- }
203
- }
204
- }, [selections, username, modelKey, onResolved, closeOverlay, platformToggles]);
205
-
206
- const showErrorModal = (errorMessage: string) => {
207
- Alert.alert('Error', errorMessage, [{ text: 'OK' }]);
208
- };
209
-
210
- return (
211
- <Modal
212
- visible={visible}
213
- transparent
214
- animationType="none"
215
- statusBarTranslucent
216
- onRequestClose={closeOverlay}
217
- >
218
- <TouchableOpacity
219
- style={styles.modalOverlay}
220
- activeOpacity={1}
221
- onPress={closeOverlay}
222
- >
223
- <TouchableWithoutFeedback onPress={(e) => e.stopPropagation()}>
224
- <Animated.View
225
- style={[
226
- styles.bottomSheet,
227
- darkMode && styles.darkContainer,
228
- {
229
- transform: [
230
- {
231
- translateY: bottomSheetAnim.interpolate({
232
- inputRange: [0, 1],
233
- outputRange: [SCREEN_HEIGHT, 0],
234
- }),
235
- },
236
- ],
237
- },
238
- ]}
239
- >
240
- <View style={styles.handleContainer}>
241
- <View style={[styles.handle, darkMode && styles.darkHandle]} />
242
- </View>
243
-
244
- <SafeAreaView style={[styles.container, darkMode && styles.darkContainer]}>
245
- {/* Header with app icon and arrow to Onairos icon */}
246
- <View style={[styles.header, darkMode && styles.darkHeader]}>
247
- <View style={styles.headerContent}>
248
- <View style={[styles.appIcon, darkMode && styles.darkAppIcon]}>
249
- <Text style={[styles.appIconText, darkMode && styles.darkText]}>
250
- {appName.charAt(0)}
251
- </Text>
252
- </View>
253
- <Icon name="arrow_forward" size={24} color={darkMode ? '#999' : '#666'} style={styles.arrow} />
254
- <View style={[styles.onairosIcon, darkMode && styles.darkOnairosIcon]}>
255
- <Text style={[styles.onairosIconText, darkMode && styles.darkText]}>O</Text>
256
- </View>
257
- </View>
258
- </View>
259
-
260
- <ScrollView style={styles.content}>
261
- {/* Main title and description */}
262
- <View style={styles.titleContainer}>
263
- <Text style={[styles.mainTitle, darkMode && styles.darkText]}>
264
- Connect your data to create a Persona of you, to connect to Cosmos
265
- </Text>
266
- <Text style={[styles.privacyMessage, darkMode && styles.darkSubText]}>
267
- None of your app data is shared with ANYONE
268
- </Text>
269
- </View>
270
-
271
- {/* Platform connection options */}
272
- <View style={styles.platformsContainer}>
273
- {platforms.map((platform) => (
274
- <View key={platform.id} style={[styles.platformItem, darkMode && styles.darkPlatformItem]}>
275
- <View style={styles.platformInfo}>
276
- <Image
277
- source={platform.icon}
278
- style={styles.platformIcon}
279
- resizeMode="contain"
280
- />
281
- <Text style={[styles.platformName, darkMode && styles.darkText]}>
282
- {platform.name}
283
- </Text>
284
- </View>
285
- <Switch
286
- value={platformToggles[platform.id]}
287
- onValueChange={() => togglePlatform(platform.id)}
288
- trackColor={{ false: '#767577', true: '#81b0ff' }}
289
- thumbColor={platformToggles[platform.id] ? '#2196F3' : '#f4f3f4'}
290
- />
291
- </View>
292
- ))}
293
- </View>
294
- </ScrollView>
295
-
296
- <View style={[styles.footer, darkMode && styles.darkFooter]}>
297
- <TouchableOpacity
298
- style={styles.footerButtonCancel}
299
- onPress={closeOverlay}
300
- >
301
- <Text style={[styles.footerButtonText, darkMode && styles.darkSubText]}>Cancel</Text>
302
- </TouchableOpacity>
303
-
304
- <TouchableOpacity
305
- style={[styles.footerButtonConfirm, darkMode && styles.darkFooterButtonConfirm]}
306
- onPress={confirmSelection}
307
- >
308
- <Text style={[styles.footerButtonTextConfirm, darkMode && { color: '#000' }]}>Connect</Text>
309
- </TouchableOpacity>
310
- </View>
311
- </SafeAreaView>
312
- </Animated.View>
313
- </TouchableWithoutFeedback>
314
- </TouchableOpacity>
315
- </Modal>
316
- );
317
- };
318
-
319
- const styles = StyleSheet.create({
320
- modalOverlay: {
321
- flex: 1,
322
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
323
- justifyContent: 'flex-end',
324
- },
325
- bottomSheet: {
326
- backgroundColor: '#fff',
327
- borderTopLeftRadius: 24,
328
- borderTopRightRadius: 24,
329
- width: SCREEN_WIDTH,
330
- height: SCREEN_HEIGHT * 0.8,
331
- overflow: 'hidden',
332
- },
333
- handleContainer: {
334
- width: '100%',
335
- alignItems: 'center',
336
- paddingTop: 12,
337
- paddingBottom: 8,
338
- },
339
- handle: {
340
- width: 40,
341
- height: 5,
342
- borderRadius: 3,
343
- backgroundColor: '#E0E0E0',
344
- },
345
- darkHandle: {
346
- backgroundColor: '#666',
347
- },
348
- container: {
349
- flex: 1,
350
- backgroundColor: '#fff',
351
- },
352
- darkContainer: {
353
- backgroundColor: '#1A1A1A',
354
- },
355
- header: {
356
- padding: 24,
357
- alignItems: 'center',
358
- },
359
- darkHeader: {
360
- backgroundColor: '#1A1A1A',
361
- },
362
- headerContent: {
363
- flexDirection: 'row',
364
- alignItems: 'center',
365
- justifyContent: 'center',
366
- marginBottom: 16,
367
- },
368
- appIcon: {
369
- width: 48,
370
- height: 48,
371
- borderRadius: 16,
372
- backgroundColor: '#F5F5F5',
373
- alignItems: 'center',
374
- justifyContent: 'center',
375
- },
376
- darkAppIcon: {
377
- backgroundColor: '#2A2A2A',
378
- },
379
- appIconText: {
380
- fontSize: 24,
381
- color: '#000',
382
- },
383
- darkText: {
384
- color: '#fff',
385
- },
386
- arrow: {
387
- marginHorizontal: 16,
388
- },
389
- onairosIcon: {
390
- width: 48,
391
- height: 48,
392
- borderRadius: 16,
393
- backgroundColor: '#F5F5F5',
394
- alignItems: 'center',
395
- justifyContent: 'center',
396
- },
397
- darkOnairosIcon: {
398
- backgroundColor: '#2A2A2A',
399
- },
400
- onairosIconText: {
401
- fontSize: 24,
402
- color: '#000',
403
- },
404
- darkSubText: {
405
- color: '#999',
406
- },
407
- titleContainer: {
408
- marginBottom: 30,
409
- },
410
- mainTitle: {
411
- fontSize: 22,
412
- fontWeight: '600',
413
- color: '#000',
414
- textAlign: 'center',
415
- marginBottom: 16,
416
- },
417
- privacyMessage: {
418
- fontSize: 14,
419
- color: '#666',
420
- textAlign: 'center',
421
- marginBottom: 16,
422
- },
423
- content: {
424
- flex: 1,
425
- paddingHorizontal: 24,
426
- },
427
- platformsContainer: {
428
- marginTop: 16,
429
- },
430
- platformItem: {
431
- flexDirection: 'row',
432
- justifyContent: 'space-between',
433
- alignItems: 'center',
434
- padding: 16,
435
- backgroundColor: '#fff',
436
- borderRadius: 16,
437
- marginBottom: 16,
438
- borderWidth: 1,
439
- borderColor: '#eee',
440
- },
441
- darkPlatformItem: {
442
- backgroundColor: '#2A2A2A',
443
- borderColor: '#333',
444
- },
445
- platformInfo: {
446
- flexDirection: 'row',
447
- alignItems: 'center',
448
- },
449
- platformIcon: {
450
- width: 32,
451
- height: 32,
452
- marginRight: 12,
453
- },
454
- platformName: {
455
- fontSize: 16,
456
- fontWeight: '500',
457
- color: '#000',
458
- },
459
- footer: {
460
- flexDirection: 'row',
461
- alignItems: 'center',
462
- justifyContent: 'space-between',
463
- padding: 24,
464
- borderTopWidth: 1,
465
- borderTopColor: '#eee',
466
- backgroundColor: '#fff',
467
- },
468
- darkFooter: {
469
- backgroundColor: '#2A2A2A',
470
- borderTopColor: '#333',
471
- },
472
- footerButtonCancel: {
473
- paddingVertical: 8,
474
- paddingHorizontal: 16,
475
- },
476
- darkFooterButton: {
477
- backgroundColor: 'transparent',
478
- },
479
- footerButtonConfirm: {
480
- paddingVertical: 16,
481
- paddingHorizontal: 32,
482
- borderRadius: 16,
483
- backgroundColor: '#fff',
484
- borderWidth: 1,
485
- borderColor: '#000',
486
- },
487
- darkFooterButtonConfirm: {
488
- backgroundColor: '#fff',
489
- borderColor: '#fff',
490
- },
491
- footerButtonText: {
492
- color: '#666',
493
- fontSize: 16,
494
- },
495
- footerButtonTextConfirm: {
496
- color: '#000',
497
- fontSize: 16,
498
- fontWeight: '600',
499
- },
500
- lightBackground: {
501
- backgroundColor: '#fff',
502
- },
503
- darkBackground: {
504
- backgroundColor: '#1A1A1A',
505
- },
506
- });
1
+ import React, { useState, useEffect, useCallback, useRef } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ TouchableOpacity,
7
+ ScrollView,
8
+ Alert,
9
+ Platform,
10
+ Dimensions,
11
+ Modal,
12
+ Animated,
13
+ TouchableWithoutFeedback,
14
+ SafeAreaView,
15
+ Image,
16
+ Switch,
17
+ } from 'react-native';
18
+ import Icon from 'react-native-vector-icons/MaterialIcons';
19
+ import { onairosApi } from '../api';
20
+ import { encryptModelKey } from '../utils/encryption';
21
+ import { COLORS } from '../constants';
22
+
23
+ const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window');
24
+
25
+ import type { OverlayProps } from '../types';
26
+
27
+ export const Overlay: React.FC<OverlayProps> = ({
28
+ data,
29
+ username,
30
+ modelKey,
31
+ onResolved,
32
+ appName = 'Your App',
33
+ darkMode = false,
34
+ platforms = [
35
+ { id: 'instagram', name: 'Instagram', icon: require('../assets/icons/instagram.png') },
36
+ { id: 'youtube', name: 'YouTube', icon: require('../assets/icons/YouTubeicon2.png') },
37
+ { id: 'reddit', name: 'Reddit', icon: require('../assets/icons/Redditicon.png') },
38
+ { id: 'pinterest', name: 'Pinterest', icon: require('../assets/icons/pinterest.png') },
39
+ { id: 'email', name: 'Email', icon: require('../assets/icons/Gmail.png') },
40
+ ],
41
+ }) => {
42
+ const [selections, setSelections] = useState<{ [key: string]: boolean }>({});
43
+ const [details, setDetails] = useState<string>('');
44
+ const [visible, setVisible] = useState(true);
45
+ const [platformToggles, setPlatformToggles] = useState<{[key: string]: boolean}>({});
46
+ const bottomSheetAnim = useRef(new Animated.Value(0)).current;
47
+
48
+ // Initialize selection state on mount
49
+ useEffect(() => {
50
+ // Initialize selection state
51
+ const initialSelections: { [key: string]: boolean } = {};
52
+ Object.keys(data).forEach((key) => {
53
+ initialSelections[key] = false;
54
+ });
55
+ setSelections(initialSelections);
56
+
57
+ // Initialize platform toggles
58
+ const initialToggles: { [key: string]: boolean } = {};
59
+ platforms.forEach((platform) => {
60
+ initialToggles[platform.id] = false;
61
+ });
62
+ setPlatformToggles(initialToggles);
63
+
64
+ getDetails();
65
+
66
+ // Animate the bottom sheet sliding up
67
+ Animated.spring(bottomSheetAnim, {
68
+ toValue: 1,
69
+ useNativeDriver: true,
70
+ bounciness: 0,
71
+ }).start();
72
+ }, []);
73
+
74
+ const getDetails = async () => {
75
+ try {
76
+ // In Expo or development, use mock data
77
+ if (__DEV__) {
78
+ setDetails('Development mode - mock account info');
79
+ return;
80
+ }
81
+
82
+ const response = await onairosApi.post('getAccountInfo', {
83
+ Info: {
84
+ username: username,
85
+ },
86
+ });
87
+ // Handle response data properly based on API structure
88
+ if (response && response.data) {
89
+ const accountInfo = typeof response.data === 'object' && response.data.AccountInfo
90
+ ? response.data.AccountInfo
91
+ : `User: ${username}`;
92
+ setDetails(accountInfo);
93
+ } else {
94
+ setDetails(`User: ${username}`);
95
+ }
96
+ } catch (e) {
97
+ console.error('Error getting account info:', e);
98
+ setDetails(`User: ${username}`);
99
+ }
100
+ };
101
+
102
+ const closeOverlay = useCallback(() => {
103
+ // Animate the overlay sliding down
104
+ Animated.timing(bottomSheetAnim, {
105
+ toValue: 0,
106
+ duration: 250,
107
+ useNativeDriver: true,
108
+ }).start(() => {
109
+ setVisible(false);
110
+ });
111
+ }, [bottomSheetAnim]);
112
+
113
+ const togglePlatform = useCallback((platformId: string) => {
114
+ setPlatformToggles(prev => ({
115
+ ...prev,
116
+ [platformId]: !prev[platformId]
117
+ }));
118
+ }, []);
119
+
120
+ const confirmSelection = useCallback(async () => {
121
+ try {
122
+ // Mock app identifier
123
+ const appId = Platform.select({
124
+ ios: 'com.onairos.mock',
125
+ android: 'com.onairos.mock',
126
+ default: 'unknown'
127
+ });
128
+
129
+ // In development mode, use mock data
130
+ if (__DEV__) {
131
+ onResolved('https://api2.onairos.uk', 'mock-token', {
132
+ username,
133
+ selections,
134
+ platforms: platformToggles
135
+ });
136
+ closeOverlay();
137
+ return;
138
+ }
139
+
140
+ // Get server public key for encryption
141
+ let serverPublicKey = 'mock-key';
142
+ try {
143
+ const keyResponse = await onairosApi.get('public/key');
144
+ if (keyResponse && keyResponse.data && typeof keyResponse.data === 'object') {
145
+ serverPublicKey = keyResponse.data.publicKey || 'mock-key';
146
+ }
147
+ } catch (e) {
148
+ console.error('Error getting server public key:', e);
149
+ }
150
+
151
+ // Encrypt the model key - only if the function exists and server key is valid
152
+ let encryptedModelKey = modelKey;
153
+ if (typeof encryptModelKey === 'function' && serverPublicKey) {
154
+ try {
155
+ encryptedModelKey = encryptModelKey(serverPublicKey, modelKey);
156
+ } catch (e) {
157
+ console.error('Error encrypting model key:', e);
158
+ }
159
+ }
160
+
161
+ const response = await onairosApi.post('getAPIUrlMobile', {
162
+ Info: {
163
+ storage: 'local',
164
+ appId: appId,
165
+ confirmations: selections,
166
+ developerURL: 'devURL',
167
+ EncryptedUserPin: encryptedModelKey,
168
+ username: username,
169
+ platforms: platformToggles
170
+ },
171
+ });
172
+
173
+ if (response && response.data && response.data.APIUrl && response.data.token) {
174
+ onResolved(response.data.APIUrl, response.data.token, {
175
+ username,
176
+ selections,
177
+ platforms: platformToggles
178
+ });
179
+ closeOverlay();
180
+ } else {
181
+ // If response doesn't have expected format, use fallbacks
182
+ onResolved('https://api2.onairos.uk', 'fallback-token', {
183
+ username,
184
+ selections,
185
+ platforms: platformToggles
186
+ });
187
+ closeOverlay();
188
+ }
189
+ } catch (e) {
190
+ console.error('Error confirming selection:', e);
191
+ // In case of error, provide fallback (development mode)
192
+ if (__DEV__) {
193
+ onResolved('https://api2.onairos.uk', 'error-fallback-token', {
194
+ username,
195
+ selections,
196
+ platforms: platformToggles,
197
+ error: true
198
+ });
199
+ closeOverlay();
200
+ } else {
201
+ showErrorModal('Failed to confirm selection. Please try again.');
202
+ }
203
+ }
204
+ }, [selections, username, modelKey, onResolved, closeOverlay, platformToggles]);
205
+
206
+ const showErrorModal = (errorMessage: string) => {
207
+ Alert.alert('Error', errorMessage, [{ text: 'OK' }]);
208
+ };
209
+
210
+ return (
211
+ <Modal
212
+ visible={visible}
213
+ transparent
214
+ animationType="none"
215
+ statusBarTranslucent
216
+ onRequestClose={closeOverlay}
217
+ >
218
+ <TouchableOpacity
219
+ style={styles.modalOverlay}
220
+ activeOpacity={1}
221
+ onPress={closeOverlay}
222
+ >
223
+ <TouchableWithoutFeedback onPress={(e) => e.stopPropagation()}>
224
+ <Animated.View
225
+ style={[
226
+ styles.bottomSheet,
227
+ darkMode && styles.darkContainer,
228
+ {
229
+ transform: [
230
+ {
231
+ translateY: bottomSheetAnim.interpolate({
232
+ inputRange: [0, 1],
233
+ outputRange: [SCREEN_HEIGHT, 0],
234
+ }),
235
+ },
236
+ ],
237
+ },
238
+ ]}
239
+ >
240
+ <View style={styles.handleContainer}>
241
+ <View style={[styles.handle, darkMode && styles.darkHandle]} />
242
+ </View>
243
+
244
+ <SafeAreaView style={[styles.container, darkMode && styles.darkContainer]}>
245
+ {/* Header with app icon and arrow to Onairos icon */}
246
+ <View style={[styles.header, darkMode && styles.darkHeader]}>
247
+ <View style={styles.headerContent}>
248
+ <View style={[styles.appIcon, darkMode && styles.darkAppIcon]}>
249
+ <Text style={[styles.appIconText, darkMode && styles.darkText]}>
250
+ {appName.charAt(0)}
251
+ </Text>
252
+ </View>
253
+ <Icon name="arrow_forward" size={24} color={darkMode ? '#999' : '#666'} style={styles.arrow} />
254
+ <View style={[styles.onairosIcon, darkMode && styles.darkOnairosIcon]}>
255
+ <Text style={[styles.onairosIconText, darkMode && styles.darkText]}>O</Text>
256
+ </View>
257
+ </View>
258
+ </View>
259
+
260
+ <ScrollView style={styles.content}>
261
+ {/* Main title and description */}
262
+ <View style={styles.titleContainer}>
263
+ <Text style={[styles.mainTitle, darkMode && styles.darkText]}>
264
+ Connect your data to create a Persona of you, to connect to Cosmos
265
+ </Text>
266
+ <Text style={[styles.privacyMessage, darkMode && styles.darkSubText]}>
267
+ None of your app data is shared with ANYONE
268
+ </Text>
269
+ </View>
270
+
271
+ {/* Platform connection options */}
272
+ <View style={styles.platformsContainer}>
273
+ {platforms.map((platform) => (
274
+ <View key={platform.id} style={[styles.platformItem, darkMode && styles.darkPlatformItem]}>
275
+ <View style={styles.platformInfo}>
276
+ <Image
277
+ source={platform.icon}
278
+ style={styles.platformIcon}
279
+ resizeMode="contain"
280
+ />
281
+ <Text style={[styles.platformName, darkMode && styles.darkText]}>
282
+ {platform.name}
283
+ </Text>
284
+ </View>
285
+ <Switch
286
+ value={platformToggles[platform.id]}
287
+ onValueChange={() => togglePlatform(platform.id)}
288
+ trackColor={{ false: '#767577', true: '#81b0ff' }}
289
+ thumbColor={platformToggles[platform.id] ? '#2196F3' : '#f4f3f4'}
290
+ />
291
+ </View>
292
+ ))}
293
+ </View>
294
+ </ScrollView>
295
+
296
+ <View style={[styles.footer, darkMode && styles.darkFooter]}>
297
+ <TouchableOpacity
298
+ style={styles.footerButtonCancel}
299
+ onPress={closeOverlay}
300
+ >
301
+ <Text style={[styles.footerButtonText, darkMode && styles.darkSubText]}>Cancel</Text>
302
+ </TouchableOpacity>
303
+
304
+ <TouchableOpacity
305
+ style={[styles.footerButtonConfirm, darkMode && styles.darkFooterButtonConfirm]}
306
+ onPress={confirmSelection}
307
+ >
308
+ <Text style={[styles.footerButtonTextConfirm, darkMode && { color: '#000' }]}>Connect</Text>
309
+ </TouchableOpacity>
310
+ </View>
311
+ </SafeAreaView>
312
+ </Animated.View>
313
+ </TouchableWithoutFeedback>
314
+ </TouchableOpacity>
315
+ </Modal>
316
+ );
317
+ };
318
+
319
+ const styles = StyleSheet.create({
320
+ modalOverlay: {
321
+ flex: 1,
322
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
323
+ justifyContent: 'flex-end',
324
+ },
325
+ bottomSheet: {
326
+ backgroundColor: '#fff',
327
+ borderTopLeftRadius: 24,
328
+ borderTopRightRadius: 24,
329
+ width: SCREEN_WIDTH,
330
+ height: SCREEN_HEIGHT * 0.8,
331
+ overflow: 'hidden',
332
+ },
333
+ handleContainer: {
334
+ width: '100%',
335
+ alignItems: 'center',
336
+ paddingTop: 12,
337
+ paddingBottom: 8,
338
+ },
339
+ handle: {
340
+ width: 40,
341
+ height: 5,
342
+ borderRadius: 3,
343
+ backgroundColor: '#E0E0E0',
344
+ },
345
+ darkHandle: {
346
+ backgroundColor: '#666',
347
+ },
348
+ container: {
349
+ flex: 1,
350
+ backgroundColor: '#fff',
351
+ },
352
+ darkContainer: {
353
+ backgroundColor: '#1A1A1A',
354
+ },
355
+ header: {
356
+ padding: 24,
357
+ alignItems: 'center',
358
+ },
359
+ darkHeader: {
360
+ backgroundColor: '#1A1A1A',
361
+ },
362
+ headerContent: {
363
+ flexDirection: 'row',
364
+ alignItems: 'center',
365
+ justifyContent: 'center',
366
+ marginBottom: 16,
367
+ },
368
+ appIcon: {
369
+ width: 48,
370
+ height: 48,
371
+ borderRadius: 16,
372
+ backgroundColor: '#F5F5F5',
373
+ alignItems: 'center',
374
+ justifyContent: 'center',
375
+ },
376
+ darkAppIcon: {
377
+ backgroundColor: '#2A2A2A',
378
+ },
379
+ appIconText: {
380
+ fontSize: 24,
381
+ color: '#000',
382
+ },
383
+ darkText: {
384
+ color: '#fff',
385
+ },
386
+ arrow: {
387
+ marginHorizontal: 16,
388
+ },
389
+ onairosIcon: {
390
+ width: 48,
391
+ height: 48,
392
+ borderRadius: 16,
393
+ backgroundColor: '#F5F5F5',
394
+ alignItems: 'center',
395
+ justifyContent: 'center',
396
+ },
397
+ darkOnairosIcon: {
398
+ backgroundColor: '#2A2A2A',
399
+ },
400
+ onairosIconText: {
401
+ fontSize: 24,
402
+ color: '#000',
403
+ },
404
+ darkSubText: {
405
+ color: '#999',
406
+ },
407
+ titleContainer: {
408
+ marginBottom: 30,
409
+ },
410
+ mainTitle: {
411
+ fontSize: 22,
412
+ fontWeight: '600',
413
+ color: '#000',
414
+ textAlign: 'center',
415
+ marginBottom: 16,
416
+ },
417
+ privacyMessage: {
418
+ fontSize: 14,
419
+ color: '#666',
420
+ textAlign: 'center',
421
+ marginBottom: 16,
422
+ },
423
+ content: {
424
+ flex: 1,
425
+ paddingHorizontal: 24,
426
+ },
427
+ platformsContainer: {
428
+ marginTop: 16,
429
+ },
430
+ platformItem: {
431
+ flexDirection: 'row',
432
+ justifyContent: 'space-between',
433
+ alignItems: 'center',
434
+ padding: 16,
435
+ backgroundColor: '#fff',
436
+ borderRadius: 16,
437
+ marginBottom: 16,
438
+ borderWidth: 1,
439
+ borderColor: '#eee',
440
+ },
441
+ darkPlatformItem: {
442
+ backgroundColor: '#2A2A2A',
443
+ borderColor: '#333',
444
+ },
445
+ platformInfo: {
446
+ flexDirection: 'row',
447
+ alignItems: 'center',
448
+ },
449
+ platformIcon: {
450
+ width: 32,
451
+ height: 32,
452
+ marginRight: 12,
453
+ },
454
+ platformName: {
455
+ fontSize: 16,
456
+ fontWeight: '500',
457
+ color: '#000',
458
+ },
459
+ footer: {
460
+ flexDirection: 'row',
461
+ alignItems: 'center',
462
+ justifyContent: 'space-between',
463
+ padding: 24,
464
+ borderTopWidth: 1,
465
+ borderTopColor: '#eee',
466
+ backgroundColor: '#fff',
467
+ },
468
+ darkFooter: {
469
+ backgroundColor: '#2A2A2A',
470
+ borderTopColor: '#333',
471
+ },
472
+ footerButtonCancel: {
473
+ paddingVertical: 8,
474
+ paddingHorizontal: 16,
475
+ },
476
+ darkFooterButton: {
477
+ backgroundColor: 'transparent',
478
+ },
479
+ footerButtonConfirm: {
480
+ paddingVertical: 16,
481
+ paddingHorizontal: 32,
482
+ borderRadius: 16,
483
+ backgroundColor: '#fff',
484
+ borderWidth: 1,
485
+ borderColor: '#000',
486
+ },
487
+ darkFooterButtonConfirm: {
488
+ backgroundColor: '#fff',
489
+ borderColor: '#fff',
490
+ },
491
+ footerButtonText: {
492
+ color: '#666',
493
+ fontSize: 16,
494
+ },
495
+ footerButtonTextConfirm: {
496
+ color: '#000',
497
+ fontSize: 16,
498
+ fontWeight: '600',
499
+ },
500
+ lightBackground: {
501
+ backgroundColor: '#fff',
502
+ },
503
+ darkBackground: {
504
+ backgroundColor: '#1A1A1A',
505
+ },
506
+ });