@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,1164 @@
1
+ "use strict";
2
+
3
+ import React, { useState, useRef, useCallback, useMemo } from 'react';
4
+ import { View, Text, TextInput, TouchableOpacity, StyleSheet, ActivityIndicator, Platform, KeyboardAvoidingView, ScrollView, Animated, StatusBar, Dimensions } from 'react-native';
5
+ import { useOxy } from '../context/OxyContext';
6
+ import { useThemeColors } from '../styles';
7
+ import { Ionicons } from '@expo/vector-icons';
8
+ import { toast } from '../../lib/sonner';
9
+ import { packageInfo } from '../../constants/version';
10
+
11
+ // Types for better type safety
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ // Constants
14
+ const FEEDBACK_TYPES = [{
15
+ id: 'bug',
16
+ label: 'Bug Report',
17
+ icon: 'bug',
18
+ color: '#FF3B30',
19
+ description: 'Report a problem or issue'
20
+ }, {
21
+ id: 'feature',
22
+ label: 'Feature Request',
23
+ icon: 'bulb',
24
+ color: '#007AFF',
25
+ description: 'Suggest a new feature'
26
+ }, {
27
+ id: 'general',
28
+ label: 'General Feedback',
29
+ icon: 'chatbubble',
30
+ color: '#34C759',
31
+ description: 'Share your thoughts'
32
+ }, {
33
+ id: 'support',
34
+ label: 'Support Request',
35
+ icon: 'help-circle',
36
+ color: '#FF9500',
37
+ description: 'Get help with something'
38
+ }];
39
+ const PRIORITY_LEVELS = [{
40
+ id: 'low',
41
+ label: 'Low',
42
+ icon: 'arrow-down',
43
+ color: '#34C759'
44
+ }, {
45
+ id: 'medium',
46
+ label: 'Medium',
47
+ icon: 'remove',
48
+ color: '#FF9500'
49
+ }, {
50
+ id: 'high',
51
+ label: 'High',
52
+ icon: 'arrow-up',
53
+ color: '#FF3B30'
54
+ }, {
55
+ id: 'critical',
56
+ label: 'Critical',
57
+ icon: 'warning',
58
+ color: '#FF0000'
59
+ }];
60
+ const CATEGORIES = {
61
+ bug: ['UI/UX', 'Performance', 'Authentication', 'File Management', 'Billing', 'Other'],
62
+ feature: ['User Interface', 'File Management', 'Security', 'Performance', 'Integration', 'Other'],
63
+ general: ['User Experience', 'Design', 'Performance', 'Documentation', 'Other'],
64
+ support: ['Account Issues', 'Billing', 'Technical Problems', 'Feature Questions', 'Other']
65
+ };
66
+
67
+ // Styles factory function
68
+ const createStyles = (colors, theme) => StyleSheet.create({
69
+ container: {
70
+ flex: 1
71
+ },
72
+ scrollContent: {
73
+ flexGrow: 1,
74
+ paddingHorizontal: 24,
75
+ paddingTop: 40,
76
+ paddingBottom: 20
77
+ },
78
+ stepContainer: {
79
+ flex: 1,
80
+ justifyContent: 'flex-start',
81
+ alignItems: 'flex-start'
82
+ },
83
+ modernHeader: {
84
+ alignItems: 'flex-start',
85
+ width: '100%',
86
+ marginBottom: 24
87
+ },
88
+ modernTitle: {
89
+ fontFamily: Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
90
+ fontWeight: Platform.OS === 'web' ? 'bold' : undefined,
91
+ fontSize: 42,
92
+ lineHeight: 48,
93
+ marginBottom: 12,
94
+ textAlign: 'left',
95
+ letterSpacing: -1
96
+ },
97
+ modernSubtitle: {
98
+ fontSize: 18,
99
+ lineHeight: 24,
100
+ textAlign: 'left',
101
+ opacity: 0.8,
102
+ marginBottom: 24
103
+ },
104
+ stepTitle: {
105
+ fontFamily: Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
106
+ fontWeight: Platform.OS === 'web' ? 'bold' : undefined,
107
+ fontSize: 42,
108
+ lineHeight: 48,
109
+ marginBottom: 12,
110
+ textAlign: 'left',
111
+ letterSpacing: -1
112
+ },
113
+ inputContainer: {
114
+ width: '100%',
115
+ marginBottom: 24
116
+ },
117
+ premiumInputWrapper: {
118
+ flexDirection: 'row',
119
+ alignItems: 'center',
120
+ height: 56,
121
+ borderRadius: 16,
122
+ paddingHorizontal: 20,
123
+ borderWidth: 2,
124
+ backgroundColor: colors.inputBackground
125
+ },
126
+ textAreaWrapper: {
127
+ flexDirection: 'column',
128
+ alignItems: 'flex-start',
129
+ minHeight: 120,
130
+ borderRadius: 16,
131
+ paddingHorizontal: 20,
132
+ paddingVertical: 16,
133
+ borderWidth: 2,
134
+ backgroundColor: colors.inputBackground
135
+ },
136
+ inputIcon: {
137
+ marginRight: 12
138
+ },
139
+ inputContent: {
140
+ flex: 1
141
+ },
142
+ modernLabel: {
143
+ fontSize: 12,
144
+ fontWeight: '500',
145
+ marginBottom: 2
146
+ },
147
+ modernInput: {
148
+ flex: 1,
149
+ fontSize: 16,
150
+ height: '100%'
151
+ },
152
+ textArea: {
153
+ flex: 1,
154
+ fontSize: 16,
155
+ textAlignVertical: 'top',
156
+ minHeight: 80
157
+ },
158
+ typeGrid: {
159
+ flexDirection: 'row',
160
+ flexWrap: 'wrap',
161
+ gap: 12,
162
+ marginBottom: 24
163
+ },
164
+ typeCard: {
165
+ width: (Dimensions.get('window').width - 72) / 2,
166
+ padding: 20,
167
+ borderRadius: 16,
168
+ borderWidth: 2,
169
+ alignItems: 'center',
170
+ justifyContent: 'center',
171
+ minHeight: 120
172
+ },
173
+ typeIcon: {
174
+ marginBottom: 12
175
+ },
176
+ typeLabel: {
177
+ fontSize: 16,
178
+ fontWeight: '600',
179
+ textAlign: 'center',
180
+ marginBottom: 4
181
+ },
182
+ typeDescription: {
183
+ fontSize: 12,
184
+ textAlign: 'center',
185
+ opacity: 0.8
186
+ },
187
+ priorityContainer: {
188
+ flexDirection: 'row',
189
+ justifyContent: 'space-between',
190
+ marginBottom: 24
191
+ },
192
+ priorityButton: {
193
+ flex: 1,
194
+ padding: 16,
195
+ borderRadius: 12,
196
+ borderWidth: 2,
197
+ alignItems: 'center',
198
+ marginHorizontal: 4
199
+ },
200
+ priorityLabel: {
201
+ fontSize: 12,
202
+ fontWeight: '600',
203
+ marginTop: 4
204
+ },
205
+ categoryContainer: {
206
+ marginBottom: 24
207
+ },
208
+ categoryButton: {
209
+ flexDirection: 'row',
210
+ alignItems: 'center',
211
+ paddingVertical: 12,
212
+ paddingHorizontal: 16,
213
+ borderRadius: 12,
214
+ borderWidth: 1,
215
+ marginBottom: 8
216
+ },
217
+ categoryText: {
218
+ fontSize: 16,
219
+ marginLeft: 12
220
+ },
221
+ checkboxContainer: {
222
+ flexDirection: 'row',
223
+ alignItems: 'center',
224
+ marginBottom: 24
225
+ },
226
+ checkbox: {
227
+ width: 24,
228
+ height: 24,
229
+ borderRadius: 6,
230
+ borderWidth: 2,
231
+ marginRight: 12,
232
+ alignItems: 'center',
233
+ justifyContent: 'center'
234
+ },
235
+ checkboxText: {
236
+ fontSize: 16,
237
+ flex: 1
238
+ },
239
+ button: {
240
+ flexDirection: 'row',
241
+ alignItems: 'center',
242
+ justifyContent: 'center',
243
+ paddingVertical: 18,
244
+ paddingHorizontal: 32,
245
+ borderRadius: 16,
246
+ marginVertical: 8,
247
+ shadowOffset: {
248
+ width: 0,
249
+ height: 4
250
+ },
251
+ shadowOpacity: 0.3,
252
+ shadowRadius: 8,
253
+ elevation: 6,
254
+ gap: 8,
255
+ width: '100%'
256
+ },
257
+ buttonText: {
258
+ color: '#FFFFFF',
259
+ fontSize: 16,
260
+ fontWeight: '600',
261
+ letterSpacing: 0.5
262
+ },
263
+ navigationButtons: {
264
+ flexDirection: 'row',
265
+ justifyContent: 'center',
266
+ marginTop: 16,
267
+ marginBottom: 8,
268
+ width: '100%',
269
+ gap: 8
270
+ },
271
+ navButton: {
272
+ flexDirection: 'row',
273
+ alignItems: 'center',
274
+ paddingVertical: 6,
275
+ paddingHorizontal: 12,
276
+ gap: 6,
277
+ minWidth: 70,
278
+ borderWidth: 1,
279
+ shadowOffset: {
280
+ width: 0,
281
+ height: 2
282
+ },
283
+ shadowOpacity: 0.1,
284
+ shadowRadius: 4,
285
+ elevation: 2
286
+ },
287
+ backButton: {
288
+ backgroundColor: 'transparent',
289
+ borderTopLeftRadius: 35,
290
+ borderBottomLeftRadius: 35,
291
+ borderTopRightRadius: 12,
292
+ borderBottomRightRadius: 12
293
+ },
294
+ nextButton: {
295
+ backgroundColor: 'transparent',
296
+ borderTopRightRadius: 35,
297
+ borderBottomRightRadius: 35,
298
+ borderTopLeftRadius: 12,
299
+ borderBottomLeftRadius: 12
300
+ },
301
+ navButtonText: {
302
+ fontSize: 13,
303
+ fontWeight: '500'
304
+ },
305
+ progressContainer: {
306
+ flexDirection: 'row',
307
+ justifyContent: 'center',
308
+ marginBottom: 20,
309
+ marginTop: 8
310
+ },
311
+ progressDot: {
312
+ height: 10,
313
+ width: 10,
314
+ borderRadius: 5,
315
+ marginHorizontal: 6,
316
+ borderWidth: 2,
317
+ borderColor: '#fff',
318
+ shadowColor: colors.primary,
319
+ shadowOpacity: 0.08,
320
+ shadowOffset: {
321
+ width: 0,
322
+ height: 1
323
+ },
324
+ shadowRadius: 2,
325
+ elevation: 1
326
+ },
327
+ summaryContainer: {
328
+ padding: 0,
329
+ marginBottom: 24,
330
+ width: '100%'
331
+ },
332
+ summaryRow: {
333
+ flexDirection: 'row',
334
+ marginBottom: 10
335
+ },
336
+ summaryLabel: {
337
+ fontSize: 15,
338
+ width: 90
339
+ },
340
+ summaryValue: {
341
+ fontSize: 15,
342
+ fontWeight: '600',
343
+ flex: 1
344
+ },
345
+ successContainer: {
346
+ alignItems: 'center',
347
+ justifyContent: 'center',
348
+ padding: 40
349
+ },
350
+ successIcon: {
351
+ marginBottom: 24
352
+ },
353
+ successTitle: {
354
+ fontSize: 24,
355
+ fontWeight: 'bold',
356
+ marginBottom: 12,
357
+ textAlign: 'center'
358
+ },
359
+ successMessage: {
360
+ fontSize: 16,
361
+ textAlign: 'center',
362
+ opacity: 0.8,
363
+ marginBottom: 24
364
+ }
365
+ });
366
+
367
+ // Custom hooks for better separation of concerns
368
+ const useFeedbackForm = () => {
369
+ const [feedbackData, setFeedbackData] = useState({
370
+ type: 'general',
371
+ title: '',
372
+ description: '',
373
+ priority: 'medium',
374
+ category: '',
375
+ contactEmail: '',
376
+ systemInfo: true
377
+ });
378
+ const [feedbackState, setFeedbackState] = useState({
379
+ status: 'idle',
380
+ message: ''
381
+ });
382
+ const updateField = useCallback((field, value) => {
383
+ setFeedbackData(prev => ({
384
+ ...prev,
385
+ [field]: value
386
+ }));
387
+ }, []);
388
+ const resetForm = useCallback(() => {
389
+ setFeedbackData({
390
+ type: 'general',
391
+ title: '',
392
+ description: '',
393
+ priority: 'medium',
394
+ category: '',
395
+ contactEmail: '',
396
+ systemInfo: true
397
+ });
398
+ setFeedbackState({
399
+ status: 'idle',
400
+ message: ''
401
+ });
402
+ }, []);
403
+ return {
404
+ feedbackData,
405
+ feedbackState,
406
+ setFeedbackState,
407
+ updateField,
408
+ resetForm
409
+ };
410
+ };
411
+
412
+ // Reusable components
413
+ const FormInput = /*#__PURE__*/React.memo(({
414
+ icon,
415
+ label,
416
+ value,
417
+ onChangeText,
418
+ placeholder,
419
+ multiline = false,
420
+ numberOfLines = 1,
421
+ testID,
422
+ colors,
423
+ styles,
424
+ borderColor
425
+ }) => /*#__PURE__*/_jsx(View, {
426
+ style: styles.inputContainer,
427
+ children: /*#__PURE__*/_jsxs(View, {
428
+ style: [multiline ? styles.textAreaWrapper : styles.premiumInputWrapper, {
429
+ borderColor: borderColor || colors.border,
430
+ backgroundColor: colors.inputBackground,
431
+ shadowColor: colors.primary,
432
+ shadowOffset: {
433
+ width: 0,
434
+ height: 4
435
+ },
436
+ shadowOpacity: 0.1,
437
+ shadowRadius: 12,
438
+ elevation: 3
439
+ }],
440
+ children: [!multiline && /*#__PURE__*/_jsx(Ionicons, {
441
+ name: icon,
442
+ size: 22,
443
+ color: colors.secondaryText,
444
+ style: styles.inputIcon
445
+ }), /*#__PURE__*/_jsxs(View, {
446
+ style: styles.inputContent,
447
+ children: [/*#__PURE__*/_jsx(Text, {
448
+ style: [styles.modernLabel, {
449
+ color: colors.secondaryText
450
+ }],
451
+ children: label
452
+ }), /*#__PURE__*/_jsx(TextInput, {
453
+ style: [multiline ? styles.textArea : styles.modernInput, {
454
+ color: colors.text
455
+ }],
456
+ value: value,
457
+ onChangeText: onChangeText,
458
+ placeholder: placeholder,
459
+ placeholderTextColor: colors.secondaryText + '60',
460
+ multiline: multiline,
461
+ numberOfLines: multiline ? numberOfLines : undefined,
462
+ testID: testID
463
+ })]
464
+ })]
465
+ })
466
+ }));
467
+ const ProgressIndicator = /*#__PURE__*/React.memo(({
468
+ currentStep,
469
+ totalSteps,
470
+ colors,
471
+ styles
472
+ }) => /*#__PURE__*/_jsx(View, {
473
+ style: styles.progressContainer,
474
+ children: Array.from({
475
+ length: totalSteps
476
+ }, (_, index) => /*#__PURE__*/_jsx(View, {
477
+ style: [styles.progressDot, currentStep === index ? {
478
+ backgroundColor: colors.primary,
479
+ width: 24
480
+ } : {
481
+ backgroundColor: colors.border
482
+ }]
483
+ }, index))
484
+ }));
485
+
486
+ // Main component
487
+ const FeedbackScreen = ({
488
+ navigate,
489
+ goBack,
490
+ onClose,
491
+ theme
492
+ }) => {
493
+ const {
494
+ user,
495
+ oxyServices
496
+ } = useOxy();
497
+ const colors = useThemeColors(theme);
498
+
499
+ // Form state
500
+ const {
501
+ feedbackData,
502
+ feedbackState,
503
+ setFeedbackState,
504
+ updateField,
505
+ resetForm
506
+ } = useFeedbackForm();
507
+
508
+ // UI state
509
+ const [currentStep, setCurrentStep] = useState(0);
510
+ const [errorMessage, setErrorMessage] = useState('');
511
+
512
+ // Animation refs
513
+ const fadeAnim = useRef(new Animated.Value(1)).current;
514
+ const slideAnim = useRef(new Animated.Value(0)).current;
515
+
516
+ // Memoized styles
517
+ const styles = useMemo(() => createStyles(colors, theme), [colors, theme]);
518
+
519
+ // Animation functions
520
+ const animateTransition = useCallback(nextStep => {
521
+ Animated.timing(fadeAnim, {
522
+ toValue: 0,
523
+ duration: 250,
524
+ useNativeDriver: true
525
+ }).start(() => {
526
+ setCurrentStep(nextStep);
527
+ slideAnim.setValue(-100);
528
+ Animated.parallel([Animated.timing(fadeAnim, {
529
+ toValue: 1,
530
+ duration: 250,
531
+ useNativeDriver: true
532
+ }), Animated.timing(slideAnim, {
533
+ toValue: 0,
534
+ duration: 300,
535
+ useNativeDriver: true
536
+ })]).start();
537
+ });
538
+ }, [fadeAnim, slideAnim]);
539
+ const nextStep = useCallback(() => {
540
+ if (currentStep < 3) {
541
+ animateTransition(currentStep + 1);
542
+ }
543
+ }, [currentStep, animateTransition]);
544
+ const prevStep = useCallback(() => {
545
+ if (currentStep > 0) {
546
+ animateTransition(currentStep - 1);
547
+ }
548
+ }, [currentStep, animateTransition]);
549
+
550
+ // Form validation helpers
551
+ const isTypeStepValid = useCallback(() => {
552
+ return feedbackData.type && feedbackData.category;
553
+ }, [feedbackData.type, feedbackData.category]);
554
+ const isDetailsStepValid = useCallback(() => {
555
+ return feedbackData.title.trim() && feedbackData.description.trim();
556
+ }, [feedbackData.title, feedbackData.description]);
557
+ const isContactStepValid = useCallback(() => {
558
+ return feedbackData.contactEmail.trim() || user?.email;
559
+ }, [feedbackData.contactEmail, user?.email]);
560
+
561
+ // Submit feedback handler
562
+ const handleSubmitFeedback = useCallback(async () => {
563
+ if (!isTypeStepValid() || !isDetailsStepValid() || !isContactStepValid()) {
564
+ toast.error('Please fill in all required fields');
565
+ return;
566
+ }
567
+ try {
568
+ setFeedbackState({
569
+ status: 'submitting',
570
+ message: ''
571
+ });
572
+ setErrorMessage('');
573
+
574
+ // Prepare feedback data
575
+ const feedbackPayload = {
576
+ type: feedbackData.type,
577
+ title: feedbackData.title,
578
+ description: feedbackData.description,
579
+ priority: feedbackData.priority,
580
+ category: feedbackData.category,
581
+ contactEmail: feedbackData.contactEmail || user?.email,
582
+ systemInfo: feedbackData.systemInfo ? {
583
+ platform: Platform.OS,
584
+ version: Platform.Version?.toString() || 'Unknown',
585
+ appVersion: packageInfo.version,
586
+ userId: user?.id,
587
+ username: user?.username,
588
+ timestamp: new Date().toISOString()
589
+ } : undefined
590
+ };
591
+
592
+ // For now, we'll simulate the API call
593
+ // In a real implementation, you would call oxyServices.submitFeedback(feedbackPayload)
594
+ await new Promise(resolve => setTimeout(resolve, 2000)); // Simulate API call
595
+
596
+ setFeedbackState({
597
+ status: 'success',
598
+ message: 'Feedback submitted successfully!'
599
+ });
600
+ toast.success('Thank you for your feedback!');
601
+
602
+ // Reset form after success
603
+ setTimeout(() => {
604
+ resetForm();
605
+ setCurrentStep(0);
606
+ }, 3000);
607
+ } catch (error) {
608
+ setFeedbackState({
609
+ status: 'error',
610
+ message: error.message || 'Failed to submit feedback'
611
+ });
612
+ toast.error(error.message || 'Failed to submit feedback');
613
+ }
614
+ }, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm]);
615
+
616
+ // Step components
617
+ const renderTypeStep = useCallback(() => /*#__PURE__*/_jsxs(Animated.View, {
618
+ style: [styles.stepContainer, {
619
+ opacity: fadeAnim,
620
+ transform: [{
621
+ translateX: slideAnim
622
+ }]
623
+ }],
624
+ children: [/*#__PURE__*/_jsxs(View, {
625
+ style: styles.modernHeader,
626
+ children: [/*#__PURE__*/_jsx(Text, {
627
+ style: [styles.stepTitle, {
628
+ color: colors.text
629
+ }],
630
+ children: "What type of feedback?"
631
+ }), /*#__PURE__*/_jsx(Text, {
632
+ style: [styles.modernSubtitle, {
633
+ color: colors.secondaryText
634
+ }],
635
+ children: "Choose the category that best describes your feedback"
636
+ })]
637
+ }), /*#__PURE__*/_jsx(View, {
638
+ style: styles.typeGrid,
639
+ children: FEEDBACK_TYPES.map(type => /*#__PURE__*/_jsxs(TouchableOpacity, {
640
+ style: [styles.typeCard, {
641
+ borderColor: feedbackData.type === type.id ? type.color : colors.border,
642
+ backgroundColor: feedbackData.type === type.id ? type.color + '10' : colors.inputBackground
643
+ }],
644
+ onPress: () => {
645
+ updateField('type', type.id);
646
+ updateField('category', '');
647
+ },
648
+ children: [/*#__PURE__*/_jsx(View, {
649
+ style: [styles.typeIcon, {
650
+ backgroundColor: type.color + '20',
651
+ padding: 12,
652
+ borderRadius: 12
653
+ }],
654
+ children: /*#__PURE__*/_jsx(Ionicons, {
655
+ name: type.icon,
656
+ size: 24,
657
+ color: type.color
658
+ })
659
+ }), /*#__PURE__*/_jsx(Text, {
660
+ style: [styles.typeLabel, {
661
+ color: colors.text
662
+ }],
663
+ children: type.label
664
+ }), /*#__PURE__*/_jsx(Text, {
665
+ style: [styles.typeDescription, {
666
+ color: colors.secondaryText
667
+ }],
668
+ children: type.description
669
+ })]
670
+ }, type.id))
671
+ }), feedbackData.type && /*#__PURE__*/_jsxs(View, {
672
+ style: styles.categoryContainer,
673
+ children: [/*#__PURE__*/_jsx(Text, {
674
+ style: [styles.modernLabel, {
675
+ color: colors.secondaryText,
676
+ marginBottom: 12
677
+ }],
678
+ children: "Category"
679
+ }), CATEGORIES[feedbackData.type]?.map(category => /*#__PURE__*/_jsxs(TouchableOpacity, {
680
+ style: [styles.categoryButton, {
681
+ borderColor: feedbackData.category === category ? colors.primary : colors.border,
682
+ backgroundColor: feedbackData.category === category ? colors.primary + '10' : colors.inputBackground
683
+ }],
684
+ onPress: () => updateField('category', category),
685
+ children: [/*#__PURE__*/_jsx(Ionicons, {
686
+ name: feedbackData.category === category ? 'checkmark-circle' : 'ellipse-outline',
687
+ size: 20,
688
+ color: feedbackData.category === category ? colors.primary : colors.secondaryText
689
+ }), /*#__PURE__*/_jsx(Text, {
690
+ style: [styles.categoryText, {
691
+ color: colors.text
692
+ }],
693
+ children: category
694
+ })]
695
+ }, category))]
696
+ }), /*#__PURE__*/_jsxs(View, {
697
+ style: styles.navigationButtons,
698
+ children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
699
+ style: [styles.navButton, {
700
+ backgroundColor: 'transparent',
701
+ borderColor: colors.border,
702
+ shadowColor: colors.border,
703
+ borderTopLeftRadius: 35,
704
+ borderBottomLeftRadius: 35,
705
+ borderTopRightRadius: 35,
706
+ borderBottomRightRadius: 35
707
+ }],
708
+ onPress: goBack,
709
+ children: [/*#__PURE__*/_jsx(Ionicons, {
710
+ name: "arrow-back",
711
+ size: 16,
712
+ color: colors.text
713
+ }), /*#__PURE__*/_jsx(Text, {
714
+ style: [styles.navButtonText, {
715
+ color: colors.text
716
+ }],
717
+ children: "Back"
718
+ })]
719
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
720
+ style: [styles.navButton, {
721
+ backgroundColor: colors.primary,
722
+ borderColor: colors.primary,
723
+ shadowColor: colors.primary,
724
+ borderTopLeftRadius: 35,
725
+ borderBottomLeftRadius: 35,
726
+ borderTopRightRadius: 35,
727
+ borderBottomRightRadius: 35
728
+ }],
729
+ onPress: nextStep,
730
+ disabled: !isTypeStepValid(),
731
+ children: [/*#__PURE__*/_jsx(Text, {
732
+ style: [styles.navButtonText, {
733
+ color: '#FFFFFF'
734
+ }],
735
+ children: "Next"
736
+ }), /*#__PURE__*/_jsx(Ionicons, {
737
+ name: "arrow-forward",
738
+ size: 16,
739
+ color: "#FFFFFF"
740
+ })]
741
+ })]
742
+ })]
743
+ }), [fadeAnim, slideAnim, colors, feedbackData, updateField, goBack, nextStep, isTypeStepValid, styles]);
744
+ const renderDetailsStep = useCallback(() => /*#__PURE__*/_jsxs(Animated.View, {
745
+ style: [styles.stepContainer, {
746
+ opacity: fadeAnim,
747
+ transform: [{
748
+ translateX: slideAnim
749
+ }]
750
+ }],
751
+ children: [/*#__PURE__*/_jsxs(View, {
752
+ style: styles.modernHeader,
753
+ children: [/*#__PURE__*/_jsx(Text, {
754
+ style: [styles.stepTitle, {
755
+ color: colors.text
756
+ }],
757
+ children: "Tell us more"
758
+ }), /*#__PURE__*/_jsx(Text, {
759
+ style: [styles.modernSubtitle, {
760
+ color: colors.secondaryText
761
+ }],
762
+ children: "Provide details about your feedback"
763
+ })]
764
+ }), /*#__PURE__*/_jsx(FormInput, {
765
+ icon: "create-outline",
766
+ label: "Title",
767
+ value: feedbackData.title,
768
+ onChangeText: text => {
769
+ updateField('title', text);
770
+ setErrorMessage('');
771
+ },
772
+ placeholder: "Brief summary of your feedback",
773
+ testID: "feedback-title-input",
774
+ colors: colors,
775
+ styles: styles
776
+ }), /*#__PURE__*/_jsx(FormInput, {
777
+ icon: "document-text-outline",
778
+ label: "Description",
779
+ value: feedbackData.description,
780
+ onChangeText: text => {
781
+ updateField('description', text);
782
+ setErrorMessage('');
783
+ },
784
+ placeholder: "Please provide detailed information...",
785
+ multiline: true,
786
+ numberOfLines: 6,
787
+ testID: "feedback-description-input",
788
+ colors: colors,
789
+ styles: styles
790
+ }), /*#__PURE__*/_jsxs(View, {
791
+ style: styles.priorityContainer,
792
+ children: [/*#__PURE__*/_jsx(Text, {
793
+ style: [styles.modernLabel, {
794
+ color: colors.secondaryText,
795
+ marginBottom: 12
796
+ }],
797
+ children: "Priority Level"
798
+ }), PRIORITY_LEVELS.map(priority => /*#__PURE__*/_jsxs(TouchableOpacity, {
799
+ style: [styles.priorityButton, {
800
+ borderColor: feedbackData.priority === priority.id ? priority.color : colors.border,
801
+ backgroundColor: feedbackData.priority === priority.id ? priority.color + '10' : colors.inputBackground
802
+ }],
803
+ onPress: () => updateField('priority', priority.id),
804
+ children: [/*#__PURE__*/_jsx(Ionicons, {
805
+ name: priority.icon,
806
+ size: 20,
807
+ color: priority.color
808
+ }), /*#__PURE__*/_jsx(Text, {
809
+ style: [styles.priorityLabel, {
810
+ color: colors.text
811
+ }],
812
+ children: priority.label
813
+ })]
814
+ }, priority.id))]
815
+ }), /*#__PURE__*/_jsxs(View, {
816
+ style: styles.navigationButtons,
817
+ children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
818
+ style: [styles.navButton, styles.backButton, {
819
+ borderColor: colors.border,
820
+ shadowColor: colors.border
821
+ }],
822
+ onPress: prevStep,
823
+ children: [/*#__PURE__*/_jsx(Ionicons, {
824
+ name: "arrow-back",
825
+ size: 16,
826
+ color: colors.text
827
+ }), /*#__PURE__*/_jsx(Text, {
828
+ style: [styles.navButtonText, {
829
+ color: colors.text
830
+ }],
831
+ children: "Back"
832
+ })]
833
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
834
+ style: [styles.navButton, styles.nextButton, {
835
+ backgroundColor: colors.primary,
836
+ borderColor: colors.primary,
837
+ shadowColor: colors.primary
838
+ }],
839
+ onPress: nextStep,
840
+ disabled: !isDetailsStepValid(),
841
+ children: [/*#__PURE__*/_jsx(Text, {
842
+ style: [styles.navButtonText, {
843
+ color: '#FFFFFF'
844
+ }],
845
+ children: "Next"
846
+ }), /*#__PURE__*/_jsx(Ionicons, {
847
+ name: "arrow-forward",
848
+ size: 16,
849
+ color: "#FFFFFF"
850
+ })]
851
+ })]
852
+ })]
853
+ }), [fadeAnim, slideAnim, colors, feedbackData, updateField, setErrorMessage, prevStep, nextStep, isDetailsStepValid, styles]);
854
+ const renderContactStep = useCallback(() => /*#__PURE__*/_jsxs(Animated.View, {
855
+ style: [styles.stepContainer, {
856
+ opacity: fadeAnim,
857
+ transform: [{
858
+ translateX: slideAnim
859
+ }]
860
+ }],
861
+ children: [/*#__PURE__*/_jsxs(View, {
862
+ style: styles.modernHeader,
863
+ children: [/*#__PURE__*/_jsx(Text, {
864
+ style: [styles.stepTitle, {
865
+ color: colors.text
866
+ }],
867
+ children: "Contact Information"
868
+ }), /*#__PURE__*/_jsx(Text, {
869
+ style: [styles.modernSubtitle, {
870
+ color: colors.secondaryText
871
+ }],
872
+ children: "Help us get back to you"
873
+ })]
874
+ }), /*#__PURE__*/_jsx(FormInput, {
875
+ icon: "mail-outline",
876
+ label: "Email Address",
877
+ value: feedbackData.contactEmail,
878
+ onChangeText: text => {
879
+ updateField('contactEmail', text);
880
+ setErrorMessage('');
881
+ },
882
+ placeholder: user?.email || "Enter your email address",
883
+ testID: "feedback-email-input",
884
+ colors: colors,
885
+ styles: styles
886
+ }), /*#__PURE__*/_jsxs(View, {
887
+ style: styles.checkboxContainer,
888
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
889
+ style: [styles.checkbox, {
890
+ borderColor: feedbackData.systemInfo ? colors.primary : colors.border,
891
+ backgroundColor: feedbackData.systemInfo ? colors.primary : 'transparent'
892
+ }],
893
+ onPress: () => updateField('systemInfo', !feedbackData.systemInfo),
894
+ children: feedbackData.systemInfo && /*#__PURE__*/_jsx(Ionicons, {
895
+ name: "checkmark",
896
+ size: 16,
897
+ color: "#FFFFFF"
898
+ })
899
+ }), /*#__PURE__*/_jsx(Text, {
900
+ style: [styles.checkboxText, {
901
+ color: colors.text
902
+ }],
903
+ children: "Include system information to help us better understand your issue"
904
+ })]
905
+ }), /*#__PURE__*/_jsxs(View, {
906
+ style: styles.navigationButtons,
907
+ children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
908
+ style: [styles.navButton, styles.backButton, {
909
+ borderColor: colors.border,
910
+ shadowColor: colors.border
911
+ }],
912
+ onPress: prevStep,
913
+ children: [/*#__PURE__*/_jsx(Ionicons, {
914
+ name: "arrow-back",
915
+ size: 16,
916
+ color: colors.text
917
+ }), /*#__PURE__*/_jsx(Text, {
918
+ style: [styles.navButtonText, {
919
+ color: colors.text
920
+ }],
921
+ children: "Back"
922
+ })]
923
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
924
+ style: [styles.navButton, styles.nextButton, {
925
+ backgroundColor: colors.primary,
926
+ borderColor: colors.primary,
927
+ shadowColor: colors.primary
928
+ }],
929
+ onPress: nextStep,
930
+ disabled: !isContactStepValid(),
931
+ children: [/*#__PURE__*/_jsx(Text, {
932
+ style: [styles.navButtonText, {
933
+ color: '#FFFFFF'
934
+ }],
935
+ children: "Next"
936
+ }), /*#__PURE__*/_jsx(Ionicons, {
937
+ name: "arrow-forward",
938
+ size: 16,
939
+ color: "#FFFFFF"
940
+ })]
941
+ })]
942
+ })]
943
+ }), [fadeAnim, slideAnim, colors, feedbackData, user, updateField, setErrorMessage, prevStep, nextStep, isContactStepValid, styles]);
944
+ const renderSummaryStep = useCallback(() => /*#__PURE__*/_jsxs(Animated.View, {
945
+ style: [styles.stepContainer, {
946
+ opacity: fadeAnim,
947
+ transform: [{
948
+ translateX: slideAnim
949
+ }]
950
+ }],
951
+ children: [/*#__PURE__*/_jsxs(View, {
952
+ style: styles.modernHeader,
953
+ children: [/*#__PURE__*/_jsx(Text, {
954
+ style: [styles.stepTitle, {
955
+ color: colors.text
956
+ }],
957
+ children: "Review & Submit"
958
+ }), /*#__PURE__*/_jsx(Text, {
959
+ style: [styles.modernSubtitle, {
960
+ color: colors.secondaryText
961
+ }],
962
+ children: "Please review your feedback before submitting"
963
+ })]
964
+ }), /*#__PURE__*/_jsxs(View, {
965
+ style: styles.summaryContainer,
966
+ children: [/*#__PURE__*/_jsxs(View, {
967
+ style: styles.summaryRow,
968
+ children: [/*#__PURE__*/_jsx(Text, {
969
+ style: [styles.summaryLabel, {
970
+ color: colors.secondaryText
971
+ }],
972
+ children: "Type:"
973
+ }), /*#__PURE__*/_jsx(Text, {
974
+ style: [styles.summaryValue, {
975
+ color: colors.text
976
+ }],
977
+ children: FEEDBACK_TYPES.find(t => t.id === feedbackData.type)?.label
978
+ })]
979
+ }), /*#__PURE__*/_jsxs(View, {
980
+ style: styles.summaryRow,
981
+ children: [/*#__PURE__*/_jsx(Text, {
982
+ style: [styles.summaryLabel, {
983
+ color: colors.secondaryText
984
+ }],
985
+ children: "Category:"
986
+ }), /*#__PURE__*/_jsx(Text, {
987
+ style: [styles.summaryValue, {
988
+ color: colors.text
989
+ }],
990
+ children: feedbackData.category
991
+ })]
992
+ }), /*#__PURE__*/_jsxs(View, {
993
+ style: styles.summaryRow,
994
+ children: [/*#__PURE__*/_jsx(Text, {
995
+ style: [styles.summaryLabel, {
996
+ color: colors.secondaryText
997
+ }],
998
+ children: "Priority:"
999
+ }), /*#__PURE__*/_jsx(Text, {
1000
+ style: [styles.summaryValue, {
1001
+ color: colors.text
1002
+ }],
1003
+ children: PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label
1004
+ })]
1005
+ }), /*#__PURE__*/_jsxs(View, {
1006
+ style: styles.summaryRow,
1007
+ children: [/*#__PURE__*/_jsx(Text, {
1008
+ style: [styles.summaryLabel, {
1009
+ color: colors.secondaryText
1010
+ }],
1011
+ children: "Title:"
1012
+ }), /*#__PURE__*/_jsx(Text, {
1013
+ style: [styles.summaryValue, {
1014
+ color: colors.text
1015
+ }],
1016
+ children: feedbackData.title
1017
+ })]
1018
+ }), /*#__PURE__*/_jsxs(View, {
1019
+ style: styles.summaryRow,
1020
+ children: [/*#__PURE__*/_jsx(Text, {
1021
+ style: [styles.summaryLabel, {
1022
+ color: colors.secondaryText
1023
+ }],
1024
+ children: "Contact:"
1025
+ }), /*#__PURE__*/_jsx(Text, {
1026
+ style: [styles.summaryValue, {
1027
+ color: colors.text
1028
+ }],
1029
+ children: feedbackData.contactEmail || user?.email
1030
+ })]
1031
+ })]
1032
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
1033
+ style: [styles.button, {
1034
+ backgroundColor: colors.primary
1035
+ }],
1036
+ onPress: handleSubmitFeedback,
1037
+ disabled: feedbackState.status === 'submitting',
1038
+ testID: "submit-feedback-button",
1039
+ children: feedbackState.status === 'submitting' ? /*#__PURE__*/_jsx(ActivityIndicator, {
1040
+ color: "#FFFFFF",
1041
+ size: "small"
1042
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
1043
+ children: [/*#__PURE__*/_jsx(Text, {
1044
+ style: styles.buttonText,
1045
+ children: "Submit Feedback"
1046
+ }), /*#__PURE__*/_jsx(Ionicons, {
1047
+ name: "send",
1048
+ size: 20,
1049
+ color: "#FFFFFF"
1050
+ })]
1051
+ })
1052
+ }), /*#__PURE__*/_jsx(View, {
1053
+ style: styles.navigationButtons,
1054
+ children: /*#__PURE__*/_jsxs(TouchableOpacity, {
1055
+ style: [styles.navButton, {
1056
+ backgroundColor: 'transparent',
1057
+ borderColor: colors.border,
1058
+ shadowColor: colors.border,
1059
+ borderTopLeftRadius: 35,
1060
+ borderBottomLeftRadius: 35,
1061
+ borderTopRightRadius: 35,
1062
+ borderBottomRightRadius: 35
1063
+ }],
1064
+ onPress: prevStep,
1065
+ children: [/*#__PURE__*/_jsx(Ionicons, {
1066
+ name: "arrow-back",
1067
+ size: 16,
1068
+ color: colors.text
1069
+ }), /*#__PURE__*/_jsx(Text, {
1070
+ style: [styles.navButtonText, {
1071
+ color: colors.text
1072
+ }],
1073
+ children: "Back"
1074
+ })]
1075
+ })
1076
+ })]
1077
+ }), [fadeAnim, slideAnim, colors, feedbackData, user, feedbackState.status, handleSubmitFeedback, prevStep, styles]);
1078
+ const renderSuccessStep = useCallback(() => /*#__PURE__*/_jsx(Animated.View, {
1079
+ style: [styles.stepContainer, {
1080
+ opacity: fadeAnim,
1081
+ transform: [{
1082
+ translateX: slideAnim
1083
+ }]
1084
+ }],
1085
+ children: /*#__PURE__*/_jsxs(View, {
1086
+ style: styles.successContainer,
1087
+ children: [/*#__PURE__*/_jsx(View, {
1088
+ style: [styles.successIcon, {
1089
+ backgroundColor: colors.success + '20',
1090
+ padding: 24,
1091
+ borderRadius: 50
1092
+ }],
1093
+ children: /*#__PURE__*/_jsx(Ionicons, {
1094
+ name: "checkmark-circle",
1095
+ size: 48,
1096
+ color: colors.success
1097
+ })
1098
+ }), /*#__PURE__*/_jsx(Text, {
1099
+ style: [styles.successTitle, {
1100
+ color: colors.text
1101
+ }],
1102
+ children: "Thank You!"
1103
+ }), /*#__PURE__*/_jsx(Text, {
1104
+ style: [styles.successMessage, {
1105
+ color: colors.secondaryText
1106
+ }],
1107
+ children: "Your feedback has been submitted successfully. We'll review it and get back to you soon."
1108
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
1109
+ style: [styles.button, {
1110
+ backgroundColor: colors.primary
1111
+ }],
1112
+ onPress: () => {
1113
+ resetForm();
1114
+ setCurrentStep(0);
1115
+ },
1116
+ children: /*#__PURE__*/_jsx(Text, {
1117
+ style: styles.buttonText,
1118
+ children: "Submit Another"
1119
+ })
1120
+ })]
1121
+ })
1122
+ }), [fadeAnim, slideAnim, colors, resetForm, styles]);
1123
+
1124
+ // Render current step
1125
+ const renderCurrentStep = useCallback(() => {
1126
+ if (feedbackState.status === 'success') {
1127
+ return renderSuccessStep();
1128
+ }
1129
+ switch (currentStep) {
1130
+ case 0:
1131
+ return renderTypeStep();
1132
+ case 1:
1133
+ return renderDetailsStep();
1134
+ case 2:
1135
+ return renderContactStep();
1136
+ case 3:
1137
+ return renderSummaryStep();
1138
+ default:
1139
+ return renderTypeStep();
1140
+ }
1141
+ }, [currentStep, feedbackState.status, renderTypeStep, renderDetailsStep, renderContactStep, renderSummaryStep, renderSuccessStep]);
1142
+ return /*#__PURE__*/_jsxs(KeyboardAvoidingView, {
1143
+ style: [styles.container, {
1144
+ backgroundColor: colors.background
1145
+ }],
1146
+ behavior: Platform.OS === 'ios' ? 'padding' : 'height',
1147
+ children: [/*#__PURE__*/_jsx(StatusBar, {
1148
+ barStyle: theme === 'dark' ? 'light-content' : 'dark-content',
1149
+ backgroundColor: colors.background
1150
+ }), /*#__PURE__*/_jsxs(ScrollView, {
1151
+ contentContainerStyle: styles.scrollContent,
1152
+ showsVerticalScrollIndicator: false,
1153
+ keyboardShouldPersistTaps: "handled",
1154
+ children: [feedbackState.status !== 'success' && /*#__PURE__*/_jsx(ProgressIndicator, {
1155
+ currentStep: currentStep,
1156
+ totalSteps: 4,
1157
+ colors: colors,
1158
+ styles: styles
1159
+ }), renderCurrentStep()]
1160
+ })]
1161
+ });
1162
+ };
1163
+ export default FeedbackScreen;
1164
+ //# sourceMappingURL=FeedbackScreen.js.map