@oxyhq/services 5.4.2 → 5.4.4

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 (418) hide show
  1. package/README.md +14 -0
  2. package/lib/commonjs/assets/OxyLogo.svg +1 -0
  3. package/lib/commonjs/assets/assets/OxyLogo.svg +1 -0
  4. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  5. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  6. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  7. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  8. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  9. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  10. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  11. package/lib/commonjs/assets/assets/icons/OxyServices.tsx +67 -0
  12. package/lib/commonjs/assets/assets/icons/logo_OxyServices.svg +1 -0
  13. package/lib/commonjs/assets/assets/illustrations/HighFive.tsx +41 -0
  14. package/lib/commonjs/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  15. package/lib/commonjs/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  16. package/lib/commonjs/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  17. package/lib/commonjs/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  18. package/lib/commonjs/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  19. package/lib/commonjs/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  20. package/lib/commonjs/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  21. package/lib/commonjs/assets/icons/OxyServices.js +53 -0
  22. package/lib/commonjs/assets/icons/OxyServices.js.map +1 -0
  23. package/lib/commonjs/assets/icons/logo_OxyServices.svg +1 -0
  24. package/lib/commonjs/assets/illustrations/HighFive.js +61 -0
  25. package/lib/commonjs/assets/illustrations/HighFive.js.map +1 -0
  26. package/lib/commonjs/constants/version.js +28 -0
  27. package/lib/commonjs/constants/version.js.map +1 -0
  28. package/lib/commonjs/core/index.js +1660 -0
  29. package/lib/commonjs/core/index.js.map +1 -0
  30. package/lib/commonjs/index.js +160 -0
  31. package/lib/commonjs/index.js.map +1 -0
  32. package/lib/commonjs/lib/sonner.js +21 -0
  33. package/lib/commonjs/lib/sonner.js.map +1 -0
  34. package/lib/commonjs/models/interfaces.js +2 -0
  35. package/lib/commonjs/models/interfaces.js.map +1 -0
  36. package/lib/commonjs/models/secureSession.js +2 -0
  37. package/lib/commonjs/models/secureSession.js.map +1 -0
  38. package/lib/commonjs/node/createAuth.js +95 -0
  39. package/lib/commonjs/node/createAuth.js.map +1 -0
  40. package/lib/commonjs/node/index.js +63 -0
  41. package/lib/commonjs/node/index.js.map +1 -0
  42. package/lib/commonjs/package.json +1 -0
  43. package/lib/commonjs/ui/components/Avatar.js +98 -0
  44. package/lib/commonjs/ui/components/Avatar.js.map +1 -0
  45. package/lib/commonjs/ui/components/FollowButton.js +246 -0
  46. package/lib/commonjs/ui/components/FollowButton.js.map +1 -0
  47. package/lib/commonjs/ui/components/FontLoader.js +181 -0
  48. package/lib/commonjs/ui/components/FontLoader.js.map +1 -0
  49. package/lib/commonjs/ui/components/GroupedItem.js +109 -0
  50. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -0
  51. package/lib/commonjs/ui/components/GroupedSection.js +33 -0
  52. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -0
  53. package/lib/commonjs/ui/components/OxyLogo.js +56 -0
  54. package/lib/commonjs/ui/components/OxyLogo.js.map +1 -0
  55. package/lib/commonjs/ui/components/OxyProvider.js +522 -0
  56. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -0
  57. package/lib/commonjs/ui/components/OxySignInButton.js +178 -0
  58. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -0
  59. package/lib/commonjs/ui/components/ProfileCard.js +124 -0
  60. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -0
  61. package/lib/commonjs/ui/components/QuickActions.js +87 -0
  62. package/lib/commonjs/ui/components/QuickActions.js.map +1 -0
  63. package/lib/commonjs/ui/components/Section.js +36 -0
  64. package/lib/commonjs/ui/components/Section.js.map +1 -0
  65. package/lib/commonjs/ui/components/SectionTitle.js +35 -0
  66. package/lib/commonjs/ui/components/SectionTitle.js.map +1 -0
  67. package/lib/commonjs/ui/components/bottomSheet/index.js +37 -0
  68. package/lib/commonjs/ui/components/bottomSheet/index.js.map +1 -0
  69. package/lib/commonjs/ui/components/icon/OxyIcon.js +27 -0
  70. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -0
  71. package/lib/commonjs/ui/components/icon/index.js +14 -0
  72. package/lib/commonjs/ui/components/icon/index.js.map +1 -0
  73. package/lib/commonjs/ui/components/index.js +97 -0
  74. package/lib/commonjs/ui/components/index.js.map +1 -0
  75. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +213 -0
  76. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -0
  77. package/lib/commonjs/ui/components/internal/TextField.js +576 -0
  78. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -0
  79. package/lib/commonjs/ui/context/OxyContext.js +584 -0
  80. package/lib/commonjs/ui/context/OxyContext.js.map +1 -0
  81. package/lib/commonjs/ui/index.js +136 -0
  82. package/lib/commonjs/ui/index.js.map +1 -0
  83. package/lib/commonjs/ui/navigation/OxyRouter.js +269 -0
  84. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -0
  85. package/lib/commonjs/ui/navigation/types.js +6 -0
  86. package/lib/commonjs/ui/navigation/types.js.map +1 -0
  87. package/lib/commonjs/ui/screens/AccountCenterScreen.js +313 -0
  88. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -0
  89. package/lib/commonjs/ui/screens/AccountManagementDemo.js +299 -0
  90. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -0
  91. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +855 -0
  92. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -0
  93. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +843 -0
  94. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -0
  95. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +788 -0
  96. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -0
  97. package/lib/commonjs/ui/screens/AppInfoScreen.js +664 -0
  98. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -0
  99. package/lib/commonjs/ui/screens/BillingManagementScreen.js +636 -0
  100. package/lib/commonjs/ui/screens/BillingManagementScreen.js.map +1 -0
  101. package/lib/commonjs/ui/screens/FeedbackScreen.js +1169 -0
  102. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -0
  103. package/lib/commonjs/ui/screens/FileManagementScreen.js +2515 -0
  104. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -0
  105. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +1620 -0
  106. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -0
  107. package/lib/commonjs/ui/screens/ProfileScreen.js +450 -0
  108. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -0
  109. package/lib/commonjs/ui/screens/SessionManagementScreen.js +449 -0
  110. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -0
  111. package/lib/commonjs/ui/screens/SignInScreen.js +882 -0
  112. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -0
  113. package/lib/commonjs/ui/screens/SignUpScreen.js +1036 -0
  114. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -0
  115. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +88 -0
  116. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -0
  117. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +364 -0
  118. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -0
  119. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +227 -0
  120. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -0
  121. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +148 -0
  122. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -0
  123. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +127 -0
  124. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -0
  125. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +105 -0
  126. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -0
  127. package/lib/commonjs/ui/store/index.js +52 -0
  128. package/lib/commonjs/ui/store/index.js.map +1 -0
  129. package/lib/commonjs/ui/styles/FONTS.md +126 -0
  130. package/lib/commonjs/ui/styles/fonts.js +84 -0
  131. package/lib/commonjs/ui/styles/fonts.js.map +1 -0
  132. package/lib/commonjs/ui/styles/index.js +28 -0
  133. package/lib/commonjs/ui/styles/index.js.map +1 -0
  134. package/lib/commonjs/ui/styles/theme.js +121 -0
  135. package/lib/commonjs/ui/styles/theme.js.map +1 -0
  136. package/lib/commonjs/utils/deviceManager.js +173 -0
  137. package/lib/commonjs/utils/deviceManager.js.map +1 -0
  138. package/lib/commonjs/utils/index.js +13 -0
  139. package/lib/commonjs/utils/index.js.map +1 -0
  140. package/lib/commonjs/utils/polyfills.js +42 -0
  141. package/lib/commonjs/utils/polyfills.js.map +1 -0
  142. package/lib/module/assets/OxyLogo.svg +1 -0
  143. package/lib/module/assets/assets/OxyLogo.svg +1 -0
  144. package/lib/module/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  145. package/lib/module/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  146. package/lib/module/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  147. package/lib/module/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  148. package/lib/module/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  149. package/lib/module/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  150. package/lib/module/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  151. package/lib/module/assets/assets/icons/OxyServices.tsx +67 -0
  152. package/lib/module/assets/assets/icons/logo_OxyServices.svg +1 -0
  153. package/lib/module/assets/assets/illustrations/HighFive.tsx +41 -0
  154. package/lib/module/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  155. package/lib/module/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  156. package/lib/module/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  157. package/lib/module/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  158. package/lib/module/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  159. package/lib/module/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  160. package/lib/module/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  161. package/lib/module/assets/icons/OxyServices.js +46 -0
  162. package/lib/module/assets/icons/OxyServices.js.map +1 -0
  163. package/lib/module/assets/icons/logo_OxyServices.svg +1 -0
  164. package/lib/module/assets/illustrations/HighFive.js +55 -0
  165. package/lib/module/assets/illustrations/HighFive.js.map +1 -0
  166. package/lib/module/constants/version.js +21 -0
  167. package/lib/module/constants/version.js.map +1 -0
  168. package/lib/module/core/index.js +1634 -0
  169. package/lib/module/core/index.js.map +1 -0
  170. package/lib/module/index.js +48 -0
  171. package/lib/module/index.js.map +1 -0
  172. package/lib/module/lib/sonner.js +16 -0
  173. package/lib/module/lib/sonner.js.map +1 -0
  174. package/lib/module/models/interfaces.js +2 -0
  175. package/lib/module/models/interfaces.js.map +1 -0
  176. package/lib/module/models/secureSession.js +2 -0
  177. package/lib/module/models/secureSession.js.map +1 -0
  178. package/lib/module/node/createAuth.js +90 -0
  179. package/lib/module/node/createAuth.js.map +1 -0
  180. package/lib/module/node/index.js +27 -0
  181. package/lib/module/node/index.js.map +1 -0
  182. package/lib/module/package.json +1 -0
  183. package/lib/module/ui/components/Avatar.js +93 -0
  184. package/lib/module/ui/components/Avatar.js.map +1 -0
  185. package/lib/module/ui/components/FollowButton.js +241 -0
  186. package/lib/module/ui/components/FollowButton.js.map +1 -0
  187. package/lib/module/ui/components/FontLoader.js +176 -0
  188. package/lib/module/ui/components/FontLoader.js.map +1 -0
  189. package/lib/module/ui/components/GroupedItem.js +104 -0
  190. package/lib/module/ui/components/GroupedItem.js.map +1 -0
  191. package/lib/module/ui/components/GroupedSection.js +28 -0
  192. package/lib/module/ui/components/GroupedSection.js.map +1 -0
  193. package/lib/module/ui/components/OxyLogo.js +49 -0
  194. package/lib/module/ui/components/OxyLogo.js.map +1 -0
  195. package/lib/module/ui/components/OxyProvider.js +516 -0
  196. package/lib/module/ui/components/OxyProvider.js.map +1 -0
  197. package/lib/module/ui/components/OxySignInButton.js +172 -0
  198. package/lib/module/ui/components/OxySignInButton.js.map +1 -0
  199. package/lib/module/ui/components/ProfileCard.js +119 -0
  200. package/lib/module/ui/components/ProfileCard.js.map +1 -0
  201. package/lib/module/ui/components/QuickActions.js +82 -0
  202. package/lib/module/ui/components/QuickActions.js.map +1 -0
  203. package/lib/module/ui/components/Section.js +31 -0
  204. package/lib/module/ui/components/Section.js.map +1 -0
  205. package/lib/module/ui/components/SectionTitle.js +30 -0
  206. package/lib/module/ui/components/SectionTitle.js.map +1 -0
  207. package/lib/module/ui/components/bottomSheet/index.js +5 -0
  208. package/lib/module/ui/components/bottomSheet/index.js.map +1 -0
  209. package/lib/module/ui/components/icon/OxyIcon.js +22 -0
  210. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -0
  211. package/lib/module/ui/components/icon/index.js +4 -0
  212. package/lib/module/ui/components/icon/index.js.map +1 -0
  213. package/lib/module/ui/components/index.js +18 -0
  214. package/lib/module/ui/components/index.js.map +1 -0
  215. package/lib/module/ui/components/internal/GroupedPillButtons.js +208 -0
  216. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -0
  217. package/lib/module/ui/components/internal/TextField.js +571 -0
  218. package/lib/module/ui/components/internal/TextField.js.map +1 -0
  219. package/lib/module/ui/context/OxyContext.js +579 -0
  220. package/lib/module/ui/context/OxyContext.js.map +1 -0
  221. package/lib/module/ui/index.js +26 -0
  222. package/lib/module/ui/index.js.map +1 -0
  223. package/lib/module/ui/navigation/OxyRouter.js +262 -0
  224. package/lib/module/ui/navigation/OxyRouter.js.map +1 -0
  225. package/lib/module/ui/navigation/types.js +4 -0
  226. package/lib/module/ui/navigation/types.js.map +1 -0
  227. package/lib/module/ui/screens/AccountCenterScreen.js +308 -0
  228. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -0
  229. package/lib/module/ui/screens/AccountManagementDemo.js +296 -0
  230. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -0
  231. package/lib/module/ui/screens/AccountOverviewScreen.js +849 -0
  232. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -0
  233. package/lib/module/ui/screens/AccountSettingsScreen.js +837 -0
  234. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -0
  235. package/lib/module/ui/screens/AccountSwitcherScreen.js +782 -0
  236. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -0
  237. package/lib/module/ui/screens/AppInfoScreen.js +658 -0
  238. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -0
  239. package/lib/module/ui/screens/BillingManagementScreen.js +631 -0
  240. package/lib/module/ui/screens/BillingManagementScreen.js.map +1 -0
  241. package/lib/module/ui/screens/FeedbackScreen.js +1164 -0
  242. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -0
  243. package/lib/module/ui/screens/FileManagementScreen.js +2510 -0
  244. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -0
  245. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1615 -0
  246. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -0
  247. package/lib/module/ui/screens/ProfileScreen.js +444 -0
  248. package/lib/module/ui/screens/ProfileScreen.js.map +1 -0
  249. package/lib/module/ui/screens/SessionManagementScreen.js +444 -0
  250. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -0
  251. package/lib/module/ui/screens/SignInScreen.js +876 -0
  252. package/lib/module/ui/screens/SignInScreen.js.map +1 -0
  253. package/lib/module/ui/screens/SignUpScreen.js +1030 -0
  254. package/lib/module/ui/screens/SignUpScreen.js.map +1 -0
  255. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +83 -0
  256. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -0
  257. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +358 -0
  258. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -0
  259. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +222 -0
  260. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -0
  261. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +142 -0
  262. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -0
  263. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +122 -0
  264. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -0
  265. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +100 -0
  266. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -0
  267. package/lib/module/ui/store/index.js +44 -0
  268. package/lib/module/ui/store/index.js.map +1 -0
  269. package/lib/module/ui/styles/FONTS.md +126 -0
  270. package/lib/module/ui/styles/fonts.js +81 -0
  271. package/lib/module/ui/styles/fonts.js.map +1 -0
  272. package/lib/module/ui/styles/index.js +5 -0
  273. package/lib/module/ui/styles/index.js.map +1 -0
  274. package/lib/module/ui/styles/theme.js +114 -0
  275. package/lib/module/ui/styles/theme.js.map +1 -0
  276. package/lib/module/utils/deviceManager.js +167 -0
  277. package/lib/module/utils/deviceManager.js.map +1 -0
  278. package/lib/module/utils/index.js +4 -0
  279. package/lib/module/utils/index.js.map +1 -0
  280. package/lib/module/utils/polyfills.js +36 -0
  281. package/lib/module/utils/polyfills.js.map +1 -0
  282. package/lib/typescript/assets/icons/OxyServices.d.ts +29 -0
  283. package/lib/typescript/assets/icons/OxyServices.d.ts.map +1 -0
  284. package/lib/typescript/assets/illustrations/HighFive.d.ts +9 -0
  285. package/lib/typescript/assets/illustrations/HighFive.d.ts.map +1 -0
  286. package/lib/typescript/constants/version.d.ts +14 -0
  287. package/lib/typescript/constants/version.d.ts.map +1 -0
  288. package/lib/typescript/core/index.d.ts +603 -0
  289. package/lib/typescript/core/index.d.ts.map +1 -0
  290. package/lib/typescript/index.d.ts +20 -0
  291. package/lib/typescript/index.d.ts.map +1 -0
  292. package/lib/typescript/lib/sonner.d.ts +6 -0
  293. package/lib/typescript/lib/sonner.d.ts.map +1 -0
  294. package/lib/typescript/models/interfaces.d.ts +179 -0
  295. package/lib/typescript/models/interfaces.d.ts.map +1 -0
  296. package/lib/typescript/models/secureSession.d.ts +27 -0
  297. package/lib/typescript/models/secureSession.d.ts.map +1 -0
  298. package/lib/typescript/node/createAuth.d.ts +7 -0
  299. package/lib/typescript/node/createAuth.d.ts.map +1 -0
  300. package/lib/typescript/node/index.d.ts +13 -0
  301. package/lib/typescript/node/index.d.ts.map +1 -0
  302. package/lib/typescript/types/expo-vector-icons.d.ts +3 -0
  303. package/lib/typescript/types/express.d.ts +5 -0
  304. package/lib/typescript/types/react-redux.d.ts +5 -0
  305. package/lib/typescript/ui/components/Avatar.d.ts +62 -0
  306. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -0
  307. package/lib/typescript/ui/components/FollowButton.d.ts +92 -0
  308. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -0
  309. package/lib/typescript/ui/components/FontLoader.d.ts +15 -0
  310. package/lib/typescript/ui/components/FontLoader.d.ts.map +1 -0
  311. package/lib/typescript/ui/components/GroupedItem.d.ts +17 -0
  312. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -0
  313. package/lib/typescript/ui/components/GroupedSection.d.ts +19 -0
  314. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -0
  315. package/lib/typescript/ui/components/OxyLogo.d.ts +29 -0
  316. package/lib/typescript/ui/components/OxyLogo.d.ts.map +1 -0
  317. package/lib/typescript/ui/components/OxyProvider.d.ts +12 -0
  318. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -0
  319. package/lib/typescript/ui/components/OxySignInButton.d.ts +70 -0
  320. package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -0
  321. package/lib/typescript/ui/components/ProfileCard.d.ts +20 -0
  322. package/lib/typescript/ui/components/ProfileCard.d.ts.map +1 -0
  323. package/lib/typescript/ui/components/QuickActions.d.ts +15 -0
  324. package/lib/typescript/ui/components/QuickActions.d.ts.map +1 -0
  325. package/lib/typescript/ui/components/Section.d.ts +11 -0
  326. package/lib/typescript/ui/components/Section.d.ts.map +1 -0
  327. package/lib/typescript/ui/components/SectionTitle.d.ts +9 -0
  328. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -0
  329. package/lib/typescript/ui/components/bottomSheet/index.d.ts +4 -0
  330. package/lib/typescript/ui/components/bottomSheet/index.d.ts.map +1 -0
  331. package/lib/typescript/ui/components/icon/OxyIcon.d.ts +10 -0
  332. package/lib/typescript/ui/components/icon/OxyIcon.d.ts.map +1 -0
  333. package/lib/typescript/ui/components/icon/index.d.ts +3 -0
  334. package/lib/typescript/ui/components/icon/index.d.ts.map +1 -0
  335. package/lib/typescript/ui/components/index.d.ts +13 -0
  336. package/lib/typescript/ui/components/index.d.ts.map +1 -0
  337. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts +18 -0
  338. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts.map +1 -0
  339. package/lib/typescript/ui/components/internal/TextField.d.ts +25 -0
  340. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -0
  341. package/lib/typescript/ui/context/OxyContext.d.ts +42 -0
  342. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -0
  343. package/lib/typescript/ui/index.d.ts +17 -0
  344. package/lib/typescript/ui/index.d.ts.map +1 -0
  345. package/lib/typescript/ui/navigation/OxyRouter.d.ts +5 -0
  346. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -0
  347. package/lib/typescript/ui/navigation/types.d.ts +116 -0
  348. package/lib/typescript/ui/navigation/types.d.ts.map +1 -0
  349. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts +5 -0
  350. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -0
  351. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts +8 -0
  352. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts.map +1 -0
  353. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +5 -0
  354. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -0
  355. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +5 -0
  356. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -0
  357. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts +5 -0
  358. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -0
  359. package/lib/typescript/ui/screens/AppInfoScreen.d.ts +5 -0
  360. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -0
  361. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts +5 -0
  362. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts.map +1 -0
  363. package/lib/typescript/ui/screens/FeedbackScreen.d.ts +5 -0
  364. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -0
  365. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +8 -0
  366. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -0
  367. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts +5 -0
  368. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -0
  369. package/lib/typescript/ui/screens/ProfileScreen.d.ts +9 -0
  370. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -0
  371. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts +5 -0
  372. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -0
  373. package/lib/typescript/ui/screens/SignInScreen.d.ts +5 -0
  374. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -0
  375. package/lib/typescript/ui/screens/SignUpScreen.d.ts +5 -0
  376. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -0
  377. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts +5 -0
  378. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -0
  379. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts +5 -0
  380. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -0
  381. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +5 -0
  382. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -0
  383. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts +5 -0
  384. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -0
  385. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts +5 -0
  386. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -0
  387. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts +5 -0
  388. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -0
  389. package/lib/typescript/ui/store/index.d.ts +19 -0
  390. package/lib/typescript/ui/store/index.d.ts.map +1 -0
  391. package/lib/typescript/ui/styles/fonts.d.ts +21 -0
  392. package/lib/typescript/ui/styles/fonts.d.ts.map +1 -0
  393. package/lib/typescript/ui/styles/index.d.ts +3 -0
  394. package/lib/typescript/ui/styles/index.d.ts.map +1 -0
  395. package/lib/typescript/ui/styles/theme.d.ts +68 -0
  396. package/lib/typescript/ui/styles/theme.d.ts.map +1 -0
  397. package/lib/typescript/utils/deviceManager.d.ts +66 -0
  398. package/lib/typescript/utils/deviceManager.d.ts.map +1 -0
  399. package/lib/typescript/utils/index.d.ts +3 -0
  400. package/lib/typescript/utils/index.d.ts.map +1 -0
  401. package/lib/typescript/utils/polyfills.d.ts +6 -0
  402. package/lib/typescript/utils/polyfills.d.ts.map +1 -0
  403. package/package.json +7 -6
  404. package/src/assets/illustrations/HighFive.tsx +41 -0
  405. package/src/node/createAuth.ts +116 -0
  406. package/src/node/index.ts +4 -0
  407. package/src/types/expo-vector-icons.d.ts +3 -0
  408. package/src/types/express.d.ts +5 -0
  409. package/src/types/react-redux.d.ts +5 -0
  410. package/src/ui/components/OxyProvider.tsx +136 -135
  411. package/src/ui/components/internal/GroupedPillButtons.tsx +253 -0
  412. package/src/ui/components/internal/TextField.tsx +694 -0
  413. package/src/ui/index.ts +6 -2
  414. package/src/ui/navigation/OxyRouter.tsx +8 -3
  415. package/src/ui/screens/FeedbackScreen.tsx +1042 -0
  416. package/src/ui/screens/SignInScreen.tsx +179 -222
  417. package/src/ui/screens/SignUpScreen.tsx +772 -608
  418. package/src/ui/store/index.ts +51 -0
@@ -0,0 +1,1036 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _OxyContext = require("../context/OxyContext");
10
+ var _styles = require("../styles");
11
+ var _vectorIcons = require("@expo/vector-icons");
12
+ var _sonner = require("../../lib/sonner");
13
+ var _HighFive = _interopRequireDefault(require("../../assets/illustrations/HighFive"));
14
+ var _GroupedPillButtons = _interopRequireDefault(require("../components/internal/GroupedPillButtons"));
15
+ var _TextField = _interopRequireDefault(require("../components/internal/TextField"));
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
+ // Types for better type safety
20
+
21
+ // Constants
22
+ const USERNAME_MIN_LENGTH = 3;
23
+ const PASSWORD_MIN_LENGTH = 8;
24
+ const VALIDATION_DEBOUNCE_MS = 800;
25
+ const CACHE_DURATION_MS = 5 * 60 * 1000; // 5 minutes
26
+
27
+ // Email validation regex
28
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
29
+
30
+ // Styles factory function
31
+ const createStyles = (colors, theme) => _reactNative.StyleSheet.create({
32
+ container: {
33
+ flex: 1
34
+ },
35
+ scrollContent: {
36
+ flexGrow: 1,
37
+ paddingHorizontal: 24,
38
+ paddingTop: 4,
39
+ paddingBottom: 20
40
+ },
41
+ stepContainer: {
42
+ flex: 1,
43
+ justifyContent: 'flex-start',
44
+ alignItems: 'flex-start'
45
+ },
46
+ modernHeader: {
47
+ alignItems: 'flex-start',
48
+ width: '100%',
49
+ marginBottom: 24
50
+ },
51
+ modernTitle: {
52
+ fontFamily: _reactNative.Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
53
+ fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
54
+ fontSize: 42,
55
+ lineHeight: 48,
56
+ marginBottom: 12,
57
+ textAlign: 'left',
58
+ letterSpacing: -1
59
+ },
60
+ modernSubtitle: {
61
+ fontSize: 18,
62
+ lineHeight: 24,
63
+ textAlign: 'left',
64
+ opacity: 0.8,
65
+ marginBottom: 24
66
+ },
67
+ welcomeImageContainer: {
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ marginVertical: 20
71
+ },
72
+ welcomeTitle: {
73
+ fontFamily: _reactNative.Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
74
+ fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
75
+ fontSize: 42,
76
+ lineHeight: 48,
77
+ marginBottom: 12,
78
+ textAlign: 'left',
79
+ letterSpacing: -1
80
+ },
81
+ welcomeText: {
82
+ fontSize: 18,
83
+ lineHeight: 24,
84
+ textAlign: 'left',
85
+ opacity: 0.8,
86
+ marginBottom: 24
87
+ },
88
+ stepTitle: {
89
+ fontFamily: _reactNative.Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
90
+ fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
91
+ fontSize: 42,
92
+ lineHeight: 48,
93
+ marginBottom: 12,
94
+ textAlign: 'left',
95
+ letterSpacing: -1
96
+ },
97
+ inputContainer: {
98
+ width: '100%',
99
+ marginBottom: 24
100
+ },
101
+ premiumInputWrapper: {
102
+ flexDirection: 'row',
103
+ alignItems: 'center',
104
+ height: 56,
105
+ borderRadius: 16,
106
+ paddingHorizontal: 20,
107
+ borderWidth: 2,
108
+ backgroundColor: colors.inputBackground
109
+ },
110
+ inputIcon: {
111
+ marginRight: 12
112
+ },
113
+ inputContent: {
114
+ flex: 1
115
+ },
116
+ modernLabel: {
117
+ fontSize: 12,
118
+ fontWeight: '500',
119
+ marginBottom: 2
120
+ },
121
+ modernInput: {
122
+ flex: 1,
123
+ fontSize: 16,
124
+ height: '100%'
125
+ },
126
+ validationIndicator: {
127
+ marginLeft: 8
128
+ },
129
+ validationCard: {
130
+ flexDirection: 'row',
131
+ alignItems: 'center',
132
+ padding: 12,
133
+ borderRadius: 12,
134
+ marginTop: 8,
135
+ gap: 8
136
+ },
137
+ validationIconContainer: {
138
+ width: 32,
139
+ height: 32,
140
+ borderRadius: 16,
141
+ justifyContent: 'center',
142
+ alignItems: 'center',
143
+ marginRight: 12
144
+ },
145
+ validationTextContainer: {
146
+ flex: 1
147
+ },
148
+ validationTitle: {
149
+ fontSize: 12,
150
+ fontWeight: '600',
151
+ marginBottom: 2
152
+ },
153
+ validationSubtitle: {
154
+ fontSize: 11,
155
+ opacity: 0.8
156
+ },
157
+ passwordToggle: {
158
+ padding: 4
159
+ },
160
+ passwordHint: {
161
+ fontSize: 12,
162
+ marginTop: 4
163
+ },
164
+ button: {
165
+ flexDirection: 'row',
166
+ alignItems: 'center',
167
+ justifyContent: 'center',
168
+ paddingVertical: 18,
169
+ paddingHorizontal: 32,
170
+ borderRadius: 16,
171
+ marginVertical: 8,
172
+ shadowOffset: {
173
+ width: 0,
174
+ height: 4
175
+ },
176
+ shadowOpacity: 0.3,
177
+ shadowRadius: 8,
178
+ elevation: 6,
179
+ gap: 8,
180
+ width: '100%'
181
+ },
182
+ buttonText: {
183
+ color: '#FFFFFF',
184
+ fontSize: 16,
185
+ fontWeight: '600',
186
+ letterSpacing: 0.5
187
+ },
188
+ footerTextContainer: {
189
+ flexDirection: 'row',
190
+ justifyContent: 'center',
191
+ marginTop: 16
192
+ },
193
+ footerText: {
194
+ fontSize: 15
195
+ },
196
+ linkText: {
197
+ fontSize: 14,
198
+ lineHeight: 20,
199
+ fontWeight: '600',
200
+ textDecorationLine: 'underline'
201
+ },
202
+ userInfoContainer: {
203
+ padding: 20,
204
+ marginVertical: 20,
205
+ borderRadius: 24,
206
+ alignItems: 'center',
207
+ shadowColor: '#000',
208
+ shadowOpacity: 0.04,
209
+ shadowOffset: {
210
+ width: 0,
211
+ height: 1
212
+ },
213
+ shadowRadius: 4,
214
+ elevation: 1
215
+ },
216
+ userInfoText: {
217
+ fontSize: 16,
218
+ marginBottom: 8,
219
+ textAlign: 'center'
220
+ },
221
+ actionButtonsContainer: {
222
+ marginTop: 24
223
+ },
224
+ navigationButtons: {
225
+ flexDirection: 'row',
226
+ justifyContent: 'center',
227
+ marginTop: 16,
228
+ marginBottom: 8,
229
+ width: '100%',
230
+ gap: 8
231
+ },
232
+ navButton: {
233
+ flexDirection: 'row',
234
+ alignItems: 'center',
235
+ paddingVertical: 6,
236
+ paddingHorizontal: 12,
237
+ gap: 6,
238
+ minWidth: 70,
239
+ borderWidth: 1,
240
+ shadowOffset: {
241
+ width: 0,
242
+ height: 2
243
+ },
244
+ shadowOpacity: 0.1,
245
+ shadowRadius: 4,
246
+ elevation: 2
247
+ },
248
+ backButton: {
249
+ backgroundColor: 'transparent',
250
+ borderTopLeftRadius: 35,
251
+ borderBottomLeftRadius: 35,
252
+ borderTopRightRadius: 12,
253
+ borderBottomRightRadius: 12
254
+ },
255
+ nextButton: {
256
+ backgroundColor: 'transparent',
257
+ borderTopRightRadius: 35,
258
+ borderBottomRightRadius: 35,
259
+ borderTopLeftRadius: 12,
260
+ borderBottomLeftRadius: 12
261
+ },
262
+ navButtonText: {
263
+ fontSize: 13,
264
+ fontWeight: '500'
265
+ },
266
+ progressContainer: {
267
+ flexDirection: 'row',
268
+ justifyContent: 'center',
269
+ marginBottom: 20,
270
+ marginTop: 8
271
+ },
272
+ progressDot: {
273
+ height: 10,
274
+ width: 10,
275
+ borderRadius: 5,
276
+ marginHorizontal: 6,
277
+ borderWidth: 2,
278
+ borderColor: '#fff',
279
+ shadowColor: colors.primary,
280
+ shadowOpacity: 0.08,
281
+ shadowOffset: {
282
+ width: 0,
283
+ height: 1
284
+ },
285
+ shadowRadius: 2,
286
+ elevation: 1
287
+ },
288
+ summaryContainer: {
289
+ padding: 0,
290
+ marginBottom: 24,
291
+ width: '100%'
292
+ },
293
+ summaryRow: {
294
+ flexDirection: 'row',
295
+ marginBottom: 10
296
+ },
297
+ summaryLabel: {
298
+ fontSize: 15,
299
+ width: 90
300
+ },
301
+ summaryValue: {
302
+ fontSize: 15,
303
+ fontWeight: '600',
304
+ flex: 1
305
+ }
306
+ });
307
+
308
+ // Custom hooks for better separation of concerns
309
+ const useFormValidation = oxyServices => {
310
+ const [validationState, setValidationState] = (0, _react.useState)({
311
+ status: 'idle',
312
+ message: ''
313
+ });
314
+ const validationCache = (0, _react.useRef)(new Map());
315
+ const validateUsername = (0, _react.useCallback)(async username => {
316
+ if (!username || username.length < USERNAME_MIN_LENGTH) {
317
+ setValidationState({
318
+ status: 'invalid',
319
+ message: ''
320
+ });
321
+ return false;
322
+ }
323
+
324
+ // Check cache first
325
+ const cached = validationCache.current.get(username);
326
+ const now = Date.now();
327
+ if (cached && now - cached.timestamp < CACHE_DURATION_MS) {
328
+ const isValid = cached.available;
329
+ setValidationState({
330
+ status: isValid ? 'valid' : 'invalid',
331
+ message: isValid ? '' : 'Username is already taken'
332
+ });
333
+ return isValid;
334
+ }
335
+ setValidationState({
336
+ status: 'validating',
337
+ message: ''
338
+ });
339
+ try {
340
+ const result = await oxyServices.checkUsernameAvailability(username);
341
+ const isValid = result.available;
342
+
343
+ // Cache the result
344
+ validationCache.current.set(username, {
345
+ available: isValid,
346
+ timestamp: now
347
+ });
348
+ setValidationState({
349
+ status: isValid ? 'valid' : 'invalid',
350
+ message: isValid ? '' : result.message || 'Username is already taken'
351
+ });
352
+ return isValid;
353
+ } catch (error) {
354
+ console.error('Username validation error:', error);
355
+ setValidationState({
356
+ status: 'invalid',
357
+ message: 'Unable to validate username. Please try again.'
358
+ });
359
+ return false;
360
+ }
361
+ }, [oxyServices]);
362
+ const validateEmail = (0, _react.useCallback)(email => {
363
+ return EMAIL_REGEX.test(email);
364
+ }, []);
365
+ const validatePassword = (0, _react.useCallback)(password => {
366
+ return password.length >= PASSWORD_MIN_LENGTH;
367
+ }, []);
368
+ const validatePasswordsMatch = (0, _react.useCallback)((password, confirmPassword) => {
369
+ return password === confirmPassword;
370
+ }, []);
371
+
372
+ // Cleanup cache on unmount
373
+ (0, _react.useEffect)(() => {
374
+ return () => {
375
+ validationCache.current.clear();
376
+ };
377
+ }, []);
378
+ return {
379
+ validationState,
380
+ validateUsername,
381
+ validateEmail,
382
+ validatePassword,
383
+ validatePasswordsMatch
384
+ };
385
+ };
386
+ const useFormData = () => {
387
+ const [formData, setFormData] = (0, _react.useState)({
388
+ username: '',
389
+ email: '',
390
+ password: '',
391
+ confirmPassword: ''
392
+ });
393
+ const [passwordVisibility, setPasswordVisibility] = (0, _react.useState)({
394
+ password: false,
395
+ confirmPassword: false
396
+ });
397
+ const updateField = (0, _react.useCallback)((field, value) => {
398
+ setFormData(prev => ({
399
+ ...prev,
400
+ [field]: value
401
+ }));
402
+ }, []);
403
+ const togglePasswordVisibility = (0, _react.useCallback)(field => {
404
+ setPasswordVisibility(prev => ({
405
+ ...prev,
406
+ [field]: !prev[field]
407
+ }));
408
+ }, []);
409
+ const resetForm = (0, _react.useCallback)(() => {
410
+ setFormData({
411
+ username: '',
412
+ email: '',
413
+ password: '',
414
+ confirmPassword: ''
415
+ });
416
+ setPasswordVisibility({
417
+ password: false,
418
+ confirmPassword: false
419
+ });
420
+ }, []);
421
+ return {
422
+ formData,
423
+ passwordVisibility,
424
+ updateField,
425
+ togglePasswordVisibility,
426
+ resetForm
427
+ };
428
+ };
429
+
430
+ // Reusable components
431
+ const ValidationIndicator = /*#__PURE__*/_react.default.memo(({
432
+ status,
433
+ colors,
434
+ styles
435
+ }) => {
436
+ if (status === 'validating') {
437
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
438
+ size: "small",
439
+ color: colors.primary,
440
+ style: styles.validationIndicator
441
+ });
442
+ }
443
+ if (status === 'valid') {
444
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
445
+ name: "checkmark-circle",
446
+ size: 22,
447
+ color: colors.success,
448
+ style: styles.validationIndicator
449
+ });
450
+ }
451
+ if (status === 'invalid') {
452
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
453
+ name: "close-circle",
454
+ size: 22,
455
+ color: colors.error,
456
+ style: styles.validationIndicator
457
+ });
458
+ }
459
+ return null;
460
+ });
461
+ const ValidationMessage = /*#__PURE__*/_react.default.memo(({
462
+ validationState,
463
+ colors,
464
+ styles
465
+ }) => {
466
+ if (validationState.status === 'idle' || !validationState.message) return null;
467
+ const isSuccess = validationState.status === 'valid';
468
+ const backgroundColor = isSuccess ? colors.success + '10' : colors.error + '10';
469
+ const borderColor = isSuccess ? colors.success + '30' : colors.error + '30';
470
+ const iconColor = isSuccess ? colors.success : colors.error;
471
+ const iconName = isSuccess ? 'checkmark-circle' : 'alert-circle';
472
+ const title = isSuccess ? 'Username Available' : 'Username Taken';
473
+ const subtitle = isSuccess ? 'Good choice! This username is available' : validationState.message;
474
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
475
+ style: [styles.validationCard, {
476
+ backgroundColor,
477
+ borderColor
478
+ }],
479
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
480
+ style: [styles.validationIconContainer, {
481
+ backgroundColor: iconColor + '20'
482
+ }],
483
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
484
+ name: iconName,
485
+ size: 16,
486
+ color: iconColor
487
+ })
488
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
489
+ style: styles.validationTextContainer,
490
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
491
+ style: [styles.validationTitle, {
492
+ color: iconColor
493
+ }],
494
+ children: title
495
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
496
+ style: [styles.validationSubtitle, {
497
+ color: colors.secondaryText
498
+ }],
499
+ children: subtitle
500
+ })]
501
+ })]
502
+ });
503
+ });
504
+ const FormInput = /*#__PURE__*/_react.default.memo(({
505
+ icon,
506
+ label,
507
+ value,
508
+ onChangeText,
509
+ secureTextEntry = false,
510
+ keyboardType = 'default',
511
+ autoCapitalize = 'sentences',
512
+ autoCorrect = true,
513
+ testID,
514
+ colors,
515
+ styles,
516
+ borderColor,
517
+ rightComponent
518
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
519
+ style: styles.inputContainer,
520
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
521
+ style: [styles.premiumInputWrapper, {
522
+ borderColor: borderColor || colors.border,
523
+ backgroundColor: colors.inputBackground,
524
+ shadowColor: colors.primary,
525
+ shadowOffset: {
526
+ width: 0,
527
+ height: 4
528
+ },
529
+ shadowOpacity: 0.1,
530
+ shadowRadius: 12,
531
+ elevation: 3
532
+ }],
533
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
534
+ name: icon,
535
+ size: 22,
536
+ color: colors.secondaryText,
537
+ style: styles.inputIcon
538
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
539
+ style: styles.inputContent,
540
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
541
+ style: [styles.modernLabel, {
542
+ color: colors.secondaryText
543
+ }],
544
+ children: label
545
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
546
+ style: [styles.modernInput, {
547
+ color: colors.text
548
+ }],
549
+ value: value,
550
+ onChangeText: onChangeText,
551
+ secureTextEntry: secureTextEntry,
552
+ keyboardType: keyboardType,
553
+ autoCapitalize: autoCapitalize,
554
+ autoCorrect: autoCorrect,
555
+ testID: testID,
556
+ placeholderTextColor: "transparent"
557
+ })]
558
+ }), rightComponent]
559
+ })
560
+ }));
561
+ const ProgressIndicator = /*#__PURE__*/_react.default.memo(({
562
+ currentStep,
563
+ totalSteps,
564
+ colors,
565
+ styles
566
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
567
+ style: styles.progressContainer,
568
+ children: Array.from({
569
+ length: totalSteps
570
+ }, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
571
+ style: [styles.progressDot, currentStep === index ? {
572
+ backgroundColor: colors.primary,
573
+ width: 24
574
+ } : {
575
+ backgroundColor: colors.border
576
+ }]
577
+ }, index))
578
+ }));
579
+
580
+ // Main component
581
+ const SignUpScreen = ({
582
+ navigate,
583
+ goBack,
584
+ onAuthenticated,
585
+ theme
586
+ }) => {
587
+ const {
588
+ signUp,
589
+ isLoading,
590
+ user,
591
+ isAuthenticated,
592
+ oxyServices
593
+ } = (0, _OxyContext.useOxy)();
594
+ const colors = (0, _styles.useThemeColors)(theme);
595
+
596
+ // Form state
597
+ const {
598
+ formData,
599
+ passwordVisibility,
600
+ updateField,
601
+ togglePasswordVisibility,
602
+ resetForm
603
+ } = useFormData();
604
+ const {
605
+ validationState,
606
+ validateUsername,
607
+ validateEmail,
608
+ validatePassword,
609
+ validatePasswordsMatch
610
+ } = useFormValidation(oxyServices);
611
+
612
+ // UI state
613
+ const [currentStep, setCurrentStep] = (0, _react.useState)(0);
614
+ const [errorMessage, setErrorMessage] = (0, _react.useState)('');
615
+
616
+ // Animation refs
617
+ const fadeAnim = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
618
+ const slideAnim = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
619
+
620
+ // Memoized styles
621
+ const styles = (0, _react.useMemo)(() => createStyles(colors, theme), [colors, theme]);
622
+
623
+ // Debounced username validation
624
+ (0, _react.useEffect)(() => {
625
+ if (!formData.username || formData.username.length < USERNAME_MIN_LENGTH) {
626
+ return;
627
+ }
628
+ const timeoutId = setTimeout(() => {
629
+ validateUsername(formData.username);
630
+ }, VALIDATION_DEBOUNCE_MS);
631
+ return () => clearTimeout(timeoutId);
632
+ }, [formData.username, validateUsername]);
633
+
634
+ // Animation functions
635
+ const animateTransition = (0, _react.useCallback)(nextStep => {
636
+ _reactNative.Animated.timing(fadeAnim, {
637
+ toValue: 0,
638
+ duration: 250,
639
+ useNativeDriver: true
640
+ }).start(() => {
641
+ setCurrentStep(nextStep);
642
+ slideAnim.setValue(-100);
643
+ _reactNative.Animated.parallel([_reactNative.Animated.timing(fadeAnim, {
644
+ toValue: 1,
645
+ duration: 250,
646
+ useNativeDriver: true
647
+ }), _reactNative.Animated.timing(slideAnim, {
648
+ toValue: 0,
649
+ duration: 300,
650
+ useNativeDriver: true
651
+ })]).start();
652
+ });
653
+ }, [fadeAnim, slideAnim]);
654
+ const nextStep = (0, _react.useCallback)(() => {
655
+ if (currentStep < 3) {
656
+ animateTransition(currentStep + 1);
657
+ }
658
+ }, [currentStep, animateTransition]);
659
+ const prevStep = (0, _react.useCallback)(() => {
660
+ if (currentStep > 0) {
661
+ animateTransition(currentStep - 1);
662
+ }
663
+ }, [currentStep, animateTransition]);
664
+
665
+ // Form validation helpers
666
+ const isIdentityStepValid = (0, _react.useCallback)(() => {
667
+ return formData.username && formData.email && validateEmail(formData.email) && validationState.status === 'valid';
668
+ }, [formData.username, formData.email, validateEmail, validationState.status]);
669
+ const isSecurityStepValid = (0, _react.useCallback)(() => {
670
+ return formData.password && validatePassword(formData.password) && validatePasswordsMatch(formData.password, formData.confirmPassword);
671
+ }, [formData.password, formData.confirmPassword, validatePassword, validatePasswordsMatch]);
672
+
673
+ // Custom next handlers for validation
674
+ const handleIdentityNext = (0, _react.useCallback)(() => {
675
+ if (!isIdentityStepValid()) {
676
+ _sonner.toast.error('Please enter a valid username and email.');
677
+ return;
678
+ }
679
+ nextStep();
680
+ }, [isIdentityStepValid, nextStep]);
681
+ const handleSecurityNext = (0, _react.useCallback)(() => {
682
+ if (!isSecurityStepValid()) {
683
+ _sonner.toast.error('Please enter a valid password and confirm it.');
684
+ return;
685
+ }
686
+ nextStep();
687
+ }, [isSecurityStepValid, nextStep]);
688
+
689
+ // Sign up handler
690
+ const handleSignUp = (0, _react.useCallback)(async () => {
691
+ if (!isIdentityStepValid() || !isSecurityStepValid()) {
692
+ _sonner.toast.error('Please fill in all fields correctly');
693
+ return;
694
+ }
695
+ try {
696
+ setErrorMessage('');
697
+ const user = await signUp(formData.username, formData.email, formData.password);
698
+ _sonner.toast.success('Account created successfully! Welcome to Oxy!');
699
+ if (onAuthenticated) {
700
+ onAuthenticated(user);
701
+ }
702
+ resetForm();
703
+ } catch (error) {
704
+ _sonner.toast.error(error.message || 'Sign up failed');
705
+ }
706
+ }, [formData, isIdentityStepValid, isSecurityStepValid, signUp, onAuthenticated, resetForm]);
707
+
708
+ // Step components
709
+ const renderWelcomeStep = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
710
+ style: [styles.stepContainer, {
711
+ opacity: fadeAnim,
712
+ transform: [{
713
+ translateX: slideAnim
714
+ }]
715
+ }],
716
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_HighFive.default, {
717
+ width: 100,
718
+ height: 100
719
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
720
+ style: styles.modernHeader,
721
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
722
+ style: [styles.modernTitle, {
723
+ color: colors.text
724
+ }],
725
+ children: "Welcome to Oxy"
726
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
727
+ style: [styles.modernSubtitle, {
728
+ color: colors.secondaryText
729
+ }],
730
+ children: "We're excited to have you join us. Let's get your account set up in just a few easy steps."
731
+ })]
732
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupedPillButtons.default, {
733
+ buttons: [{
734
+ text: 'Get Started',
735
+ onPress: nextStep,
736
+ icon: 'arrow-forward',
737
+ variant: 'primary',
738
+ testID: 'welcome-next-button'
739
+ }],
740
+ colors: colors
741
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
742
+ style: styles.footerTextContainer,
743
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
744
+ style: [styles.footerText, {
745
+ color: colors.text
746
+ }],
747
+ children: ["Already have an account?", ' ']
748
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
749
+ onPress: () => navigate('SignIn'),
750
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
751
+ style: [styles.linkText, {
752
+ color: colors.primary
753
+ }],
754
+ children: "Sign In"
755
+ })
756
+ })]
757
+ })]
758
+ }), [fadeAnim, slideAnim, colors, nextStep, navigate, styles]);
759
+ const renderIdentityStep = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
760
+ style: [styles.stepContainer, {
761
+ opacity: fadeAnim,
762
+ transform: [{
763
+ translateX: slideAnim
764
+ }]
765
+ }],
766
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
767
+ style: styles.modernHeader,
768
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
769
+ style: [styles.stepTitle, {
770
+ color: colors.text
771
+ }],
772
+ children: "Who are you?"
773
+ })
774
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
775
+ icon: "person-outline",
776
+ label: "Username",
777
+ value: formData.username,
778
+ onChangeText: text => {
779
+ updateField('username', text);
780
+ setErrorMessage('');
781
+ },
782
+ autoCapitalize: "none",
783
+ autoCorrect: false,
784
+ testID: "username-input",
785
+ colors: colors,
786
+ variant: "filled",
787
+ error: validationState.status === 'invalid' ? validationState.message : undefined,
788
+ loading: validationState.status === 'validating',
789
+ success: validationState.status === 'valid'
790
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidationMessage, {
791
+ validationState: validationState,
792
+ colors: colors,
793
+ styles: styles
794
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
795
+ icon: "mail-outline",
796
+ label: "Email",
797
+ value: formData.email,
798
+ onChangeText: text => {
799
+ updateField('email', text);
800
+ },
801
+ keyboardType: "email-address",
802
+ autoCapitalize: "none",
803
+ autoCorrect: false,
804
+ testID: "email-input",
805
+ colors: colors,
806
+ variant: "filled",
807
+ error: formData.email && !validateEmail(formData.email) ? 'Please enter a valid email address' : undefined
808
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupedPillButtons.default, {
809
+ buttons: [{
810
+ text: 'Back',
811
+ onPress: prevStep,
812
+ icon: 'arrow-back',
813
+ variant: 'transparent'
814
+ }, {
815
+ text: 'Next',
816
+ onPress: handleIdentityNext,
817
+ icon: 'arrow-forward',
818
+ variant: 'primary'
819
+ }],
820
+ colors: colors
821
+ })]
822
+ }), [fadeAnim, slideAnim, colors, formData, validationState, updateField, setErrorMessage, prevStep, handleIdentityNext, styles]);
823
+ const renderSecurityStep = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
824
+ style: [styles.stepContainer, {
825
+ opacity: fadeAnim,
826
+ transform: [{
827
+ translateX: slideAnim
828
+ }]
829
+ }],
830
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
831
+ style: styles.modernHeader,
832
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
833
+ style: [styles.stepTitle, {
834
+ color: colors.text
835
+ }],
836
+ children: "Secure your account"
837
+ })
838
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
839
+ icon: "lock-closed-outline",
840
+ label: "Password",
841
+ value: formData.password,
842
+ onChangeText: text => {
843
+ updateField('password', text);
844
+ },
845
+ secureTextEntry: !passwordVisibility.password,
846
+ autoCapitalize: "none",
847
+ autoCorrect: false,
848
+ testID: "password-input",
849
+ colors: colors,
850
+ variant: "filled",
851
+ error: formData.password && !validatePassword(formData.password) ? `Password must be at least ${PASSWORD_MIN_LENGTH} characters` : undefined
852
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
853
+ style: [styles.passwordHint, {
854
+ color: colors.secondaryText
855
+ }],
856
+ children: ["Password must be at least ", PASSWORD_MIN_LENGTH, " characters long"]
857
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
858
+ icon: "lock-closed-outline",
859
+ label: "Confirm Password",
860
+ value: formData.confirmPassword,
861
+ onChangeText: text => {
862
+ updateField('confirmPassword', text);
863
+ },
864
+ secureTextEntry: !passwordVisibility.confirmPassword,
865
+ autoCapitalize: "none",
866
+ autoCorrect: false,
867
+ testID: "confirm-password-input",
868
+ colors: colors,
869
+ variant: "filled",
870
+ error: formData.confirmPassword && !validatePasswordsMatch(formData.password, formData.confirmPassword) ? 'Passwords do not match' : undefined
871
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupedPillButtons.default, {
872
+ buttons: [{
873
+ text: 'Back',
874
+ onPress: prevStep,
875
+ icon: 'arrow-back',
876
+ variant: 'transparent'
877
+ }, {
878
+ text: 'Next',
879
+ onPress: handleSecurityNext,
880
+ icon: 'arrow-forward',
881
+ variant: 'primary'
882
+ }],
883
+ colors: colors
884
+ })]
885
+ }), [fadeAnim, slideAnim, colors, formData, passwordVisibility, updateField, setErrorMessage, togglePasswordVisibility, prevStep, handleSecurityNext, styles]);
886
+ const renderSummaryStep = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
887
+ style: [styles.stepContainer, {
888
+ opacity: fadeAnim,
889
+ transform: [{
890
+ translateX: slideAnim
891
+ }]
892
+ }],
893
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
894
+ style: styles.modernHeader,
895
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
896
+ style: [styles.stepTitle, {
897
+ color: colors.text
898
+ }],
899
+ children: "Ready to join"
900
+ })
901
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
902
+ style: styles.summaryContainer,
903
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
904
+ style: styles.summaryRow,
905
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
906
+ style: [styles.summaryLabel, {
907
+ color: colors.secondaryText
908
+ }],
909
+ children: "Username:"
910
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
911
+ style: [styles.summaryValue, {
912
+ color: colors.text
913
+ }],
914
+ children: formData.username
915
+ })]
916
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
917
+ style: styles.summaryRow,
918
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
919
+ style: [styles.summaryLabel, {
920
+ color: colors.secondaryText
921
+ }],
922
+ children: "Email:"
923
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
924
+ style: [styles.summaryValue, {
925
+ color: colors.text
926
+ }],
927
+ children: formData.email
928
+ })]
929
+ })]
930
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GroupedPillButtons.default, {
931
+ buttons: [{
932
+ text: 'Back',
933
+ onPress: prevStep,
934
+ icon: 'arrow-back',
935
+ variant: 'transparent'
936
+ }, {
937
+ text: 'Create Account',
938
+ onPress: handleSignUp,
939
+ icon: 'checkmark',
940
+ variant: 'primary',
941
+ disabled: isLoading,
942
+ loading: isLoading,
943
+ testID: 'signup-button'
944
+ }],
945
+ colors: colors
946
+ })]
947
+ }), [fadeAnim, slideAnim, colors, formData, isLoading, handleSignUp, prevStep, styles]);
948
+
949
+ // If user is already authenticated, show user info
950
+ if (user && isAuthenticated) {
951
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.KeyboardAvoidingView, {
952
+ style: [styles.container, {
953
+ backgroundColor: colors.background
954
+ }],
955
+ behavior: _reactNative.Platform.OS === 'ios' ? 'padding' : 'height',
956
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.StatusBar, {
957
+ barStyle: theme === 'dark' ? 'light-content' : 'dark-content',
958
+ backgroundColor: colors.background
959
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
960
+ contentContainerStyle: styles.scrollContent,
961
+ showsVerticalScrollIndicator: false,
962
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
963
+ style: [styles.welcomeTitle, {
964
+ color: colors.text
965
+ }],
966
+ children: ["Welcome, ", user.username, "!"]
967
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
968
+ style: [styles.userInfoContainer, {
969
+ backgroundColor: colors.inputBackground
970
+ }],
971
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
972
+ style: [styles.userInfoText, {
973
+ color: colors.text
974
+ }],
975
+ children: "You are already signed in."
976
+ }), user.email && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
977
+ style: [styles.userInfoText, {
978
+ color: colors.secondaryText
979
+ }],
980
+ children: ["Email: ", user.email]
981
+ })]
982
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
983
+ style: styles.actionButtonsContainer,
984
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
985
+ style: [styles.button, {
986
+ backgroundColor: colors.primary
987
+ }],
988
+ onPress: () => navigate('AccountCenter'),
989
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
990
+ style: styles.buttonText,
991
+ children: "Go to Account Center"
992
+ })
993
+ })
994
+ })]
995
+ })]
996
+ });
997
+ }
998
+
999
+ // Render current step
1000
+ const renderCurrentStep = (0, _react.useCallback)(() => {
1001
+ switch (currentStep) {
1002
+ case 0:
1003
+ return renderWelcomeStep();
1004
+ case 1:
1005
+ return renderIdentityStep();
1006
+ case 2:
1007
+ return renderSecurityStep();
1008
+ case 3:
1009
+ return renderSummaryStep();
1010
+ default:
1011
+ return renderWelcomeStep();
1012
+ }
1013
+ }, [currentStep, renderWelcomeStep, renderIdentityStep, renderSecurityStep, renderSummaryStep]);
1014
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.KeyboardAvoidingView, {
1015
+ style: [styles.container, {
1016
+ backgroundColor: colors.background
1017
+ }],
1018
+ behavior: _reactNative.Platform.OS === 'ios' ? 'padding' : 'height',
1019
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.StatusBar, {
1020
+ barStyle: theme === 'dark' ? 'light-content' : 'dark-content',
1021
+ backgroundColor: colors.background
1022
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
1023
+ contentContainerStyle: styles.scrollContent,
1024
+ showsVerticalScrollIndicator: false,
1025
+ keyboardShouldPersistTaps: "handled",
1026
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ProgressIndicator, {
1027
+ currentStep: currentStep,
1028
+ totalSteps: 4,
1029
+ colors: colors,
1030
+ styles: styles
1031
+ }), renderCurrentStep()]
1032
+ })]
1033
+ });
1034
+ };
1035
+ var _default = exports.default = SignUpScreen;
1036
+ //# sourceMappingURL=SignUpScreen.js.map