@oxyhq/services 5.11.9 → 5.11.11

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 (305) hide show
  1. package/lib/commonjs/ui/components/AnimationExample.js +213 -0
  2. package/lib/commonjs/ui/components/AnimationExample.js.map +1 -0
  3. package/lib/commonjs/ui/components/FollowButton.js +58 -47
  4. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  5. package/lib/commonjs/ui/components/GroupedItem.js +2 -1
  6. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  7. package/lib/commonjs/ui/components/GroupedSection.js +3 -0
  8. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  9. package/lib/commonjs/ui/components/Header.js +26 -12
  10. package/lib/commonjs/ui/components/Header.js.map +1 -1
  11. package/lib/commonjs/ui/components/OxyProvider.js +69 -33
  12. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  13. package/lib/commonjs/ui/components/ProfileCard.js +5 -1
  14. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  15. package/lib/commonjs/ui/components/StepBasedScreen.README.md +337 -0
  16. package/lib/commonjs/ui/components/StepBasedScreen.js +361 -0
  17. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -0
  18. package/lib/commonjs/ui/components/icon/OxyIcon.js +3 -3
  19. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -1
  20. package/lib/commonjs/ui/components/index.js +0 -7
  21. package/lib/commonjs/ui/components/index.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/PinInput.js +1 -1
  23. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/TextField.js +8 -4
  25. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  26. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js +161 -0
  27. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -0
  28. package/lib/commonjs/ui/context/OxyContext.js +103 -44
  29. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  30. package/lib/commonjs/ui/hooks/useFollow.types.js +2 -0
  31. package/lib/commonjs/ui/hooks/useFollow.types.js.map +1 -0
  32. package/lib/commonjs/ui/navigation/OxyRouter.js +10 -0
  33. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  34. package/lib/commonjs/ui/screens/AccountCenterScreen.js +26 -14
  35. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  36. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +3 -3
  37. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  38. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +64 -15
  39. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  40. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +4 -4
  41. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  42. package/lib/commonjs/ui/screens/FeedbackScreen.js +72 -75
  43. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  44. package/lib/commonjs/ui/screens/FileManagementScreen.js +286 -126
  45. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +322 -0
  47. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -0
  48. package/lib/commonjs/ui/screens/ProfileScreen.js +56 -56
  49. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +87 -219
  51. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/SessionManagementScreen.js +176 -174
  53. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/SignInScreen.js +138 -244
  55. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  56. package/lib/commonjs/ui/screens/SignUpScreen.js +143 -744
  57. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +386 -0
  59. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -0
  60. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +25 -15
  61. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  62. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +16 -9
  63. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  64. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +1 -1
  65. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js +110 -0
  67. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js.map +1 -0
  68. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js +138 -0
  69. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js.map +1 -0
  70. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js +141 -0
  71. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js.map +1 -0
  72. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js +165 -0
  73. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js.map +1 -0
  74. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js +150 -0
  75. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js.map +1 -0
  76. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js +171 -0
  77. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js.map +1 -0
  78. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js +163 -0
  79. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js.map +1 -0
  80. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js +170 -0
  81. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js.map +1 -0
  82. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js +72 -0
  83. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js.map +1 -0
  84. package/lib/commonjs/ui/styles/authStyles.js +1 -1
  85. package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
  86. package/lib/module/ui/components/AnimationExample.js +209 -0
  87. package/lib/module/ui/components/AnimationExample.js.map +1 -0
  88. package/lib/module/ui/components/FollowButton.js +58 -47
  89. package/lib/module/ui/components/FollowButton.js.map +1 -1
  90. package/lib/module/ui/components/GroupedItem.js +2 -1
  91. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  92. package/lib/module/ui/components/GroupedSection.js +3 -0
  93. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  94. package/lib/module/ui/components/Header.js +26 -12
  95. package/lib/module/ui/components/Header.js.map +1 -1
  96. package/lib/module/ui/components/OxyProvider.js +70 -34
  97. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  98. package/lib/module/ui/components/ProfileCard.js +5 -1
  99. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  100. package/lib/module/ui/components/Section.js.map +1 -1
  101. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  102. package/lib/module/ui/components/StepBasedScreen.README.md +337 -0
  103. package/lib/module/ui/components/StepBasedScreen.js +356 -0
  104. package/lib/module/ui/components/StepBasedScreen.js.map +1 -0
  105. package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  106. package/lib/module/ui/components/icon/OxyIcon.js +3 -3
  107. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -1
  108. package/lib/module/ui/components/index.js +0 -1
  109. package/lib/module/ui/components/index.js.map +1 -1
  110. package/lib/module/ui/components/internal/PinInput.js +1 -1
  111. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  112. package/lib/module/ui/components/internal/TextField.js +8 -4
  113. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  114. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js +156 -0
  115. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -0
  116. package/lib/module/ui/context/OxyContext.js +103 -45
  117. package/lib/module/ui/context/OxyContext.js.map +1 -1
  118. package/lib/module/ui/hooks/useFollow.types.js +2 -0
  119. package/lib/module/ui/hooks/useFollow.types.js.map +1 -0
  120. package/lib/module/ui/navigation/OxyRouter.js +10 -0
  121. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  122. package/lib/module/ui/screens/AccountCenterScreen.js +12 -1
  123. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  124. package/lib/module/ui/screens/AccountOverviewScreen.js +3 -3
  125. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  126. package/lib/module/ui/screens/AccountSettingsScreen.js +64 -15
  127. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  128. package/lib/module/ui/screens/AccountSwitcherScreen.js +4 -4
  129. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  130. package/lib/module/ui/screens/FeedbackScreen.js +72 -75
  131. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  132. package/lib/module/ui/screens/FileManagementScreen.js +285 -125
  133. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  134. package/lib/module/ui/screens/LanguageSelectorScreen.js +319 -0
  135. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -0
  136. package/lib/module/ui/screens/ProfileScreen.js +56 -56
  137. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  138. package/lib/module/ui/screens/RecoverAccountScreen.js +91 -222
  139. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  140. package/lib/module/ui/screens/SessionManagementScreen.js +177 -175
  141. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  142. package/lib/module/ui/screens/SignInScreen.js +140 -246
  143. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  144. package/lib/module/ui/screens/SignUpScreen.js +145 -745
  145. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  146. package/lib/module/ui/screens/WelcomeNewUserScreen.js +382 -0
  147. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -0
  148. package/lib/module/ui/screens/internal/SignInPasswordStep.js +23 -14
  149. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  150. package/lib/module/ui/screens/internal/SignInUsernameStep.js +15 -9
  151. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  152. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +1 -1
  153. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  154. package/lib/module/ui/screens/steps/RecoverRequestStep.js +105 -0
  155. package/lib/module/ui/screens/steps/RecoverRequestStep.js.map +1 -0
  156. package/lib/module/ui/screens/steps/RecoverSuccessStep.js +133 -0
  157. package/lib/module/ui/screens/steps/RecoverSuccessStep.js.map +1 -0
  158. package/lib/module/ui/screens/steps/RecoverVerifyStep.js +136 -0
  159. package/lib/module/ui/screens/steps/RecoverVerifyStep.js.map +1 -0
  160. package/lib/module/ui/screens/steps/SignInPasswordStep.js +160 -0
  161. package/lib/module/ui/screens/steps/SignInPasswordStep.js.map +1 -0
  162. package/lib/module/ui/screens/steps/SignInUsernameStep.js +145 -0
  163. package/lib/module/ui/screens/steps/SignInUsernameStep.js.map +1 -0
  164. package/lib/module/ui/screens/steps/SignUpIdentityStep.js +166 -0
  165. package/lib/module/ui/screens/steps/SignUpIdentityStep.js.map +1 -0
  166. package/lib/module/ui/screens/steps/SignUpSecurityStep.js +158 -0
  167. package/lib/module/ui/screens/steps/SignUpSecurityStep.js.map +1 -0
  168. package/lib/module/ui/screens/steps/SignUpSummaryStep.js +165 -0
  169. package/lib/module/ui/screens/steps/SignUpSummaryStep.js.map +1 -0
  170. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js +67 -0
  171. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js.map +1 -0
  172. package/lib/module/ui/styles/authStyles.js +1 -1
  173. package/lib/module/ui/styles/authStyles.js.map +1 -1
  174. package/lib/typescript/models/interfaces.d.ts +5 -8
  175. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  176. package/lib/typescript/models/session.d.ts +1 -4
  177. package/lib/typescript/models/session.d.ts.map +1 -1
  178. package/lib/typescript/ui/components/AnimationExample.d.ts +4 -0
  179. package/lib/typescript/ui/components/AnimationExample.d.ts.map +1 -0
  180. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  181. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  182. package/lib/typescript/ui/components/Header.d.ts +9 -0
  183. package/lib/typescript/ui/components/Header.d.ts.map +1 -1
  184. package/lib/typescript/ui/components/OxyPayButton.d.ts +2 -2
  185. package/lib/typescript/ui/components/OxyPayButton.d.ts.map +1 -1
  186. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  187. package/lib/typescript/ui/components/ProfileCard.d.ts +1 -3
  188. package/lib/typescript/ui/components/ProfileCard.d.ts.map +1 -1
  189. package/lib/typescript/ui/components/Section.d.ts +2 -1
  190. package/lib/typescript/ui/components/Section.d.ts.map +1 -1
  191. package/lib/typescript/ui/components/SectionTitle.d.ts +2 -1
  192. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -1
  193. package/lib/typescript/ui/components/StepBasedScreen.d.ts +24 -0
  194. package/lib/typescript/ui/components/StepBasedScreen.d.ts.map +1 -0
  195. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts +2 -1
  196. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
  197. package/lib/typescript/ui/components/icon/OxyIcon.d.ts +1 -1
  198. package/lib/typescript/ui/components/icon/OxyIcon.d.ts.map +1 -1
  199. package/lib/typescript/ui/components/index.d.ts +0 -1
  200. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  201. package/lib/typescript/ui/components/internal/PinInput.d.ts +9 -1
  202. package/lib/typescript/ui/components/internal/PinInput.d.ts.map +1 -1
  203. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  204. package/lib/typescript/ui/components/photogrid/JustifiedPhotoGrid.d.ts +27 -0
  205. package/lib/typescript/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -0
  206. package/lib/typescript/ui/context/OxyContext.d.ts +8 -3
  207. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  208. package/lib/typescript/ui/hooks/useFollow.types.d.ts +33 -0
  209. package/lib/typescript/ui/hooks/useFollow.types.d.ts.map +1 -0
  210. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  211. package/lib/typescript/ui/navigation/types.d.ts +5 -0
  212. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  213. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  214. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  215. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  216. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +18 -1
  217. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  218. package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts +7 -0
  219. package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts.map +1 -0
  220. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +2 -2
  221. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  222. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  223. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +2 -9
  224. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  225. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  226. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  227. package/lib/typescript/ui/screens/SignUpScreen.d.ts +1 -1
  228. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
  229. package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts +13 -0
  230. package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -0
  231. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +5 -5
  232. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
  233. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +4 -4
  234. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
  235. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts +21 -0
  236. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts.map +1 -0
  237. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts +18 -0
  238. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts.map +1 -0
  239. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts +24 -0
  240. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts.map +1 -0
  241. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts +27 -0
  242. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts.map +1 -0
  243. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts +27 -0
  244. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts.map +1 -0
  245. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts +25 -0
  246. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts.map +1 -0
  247. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts +26 -0
  248. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts.map +1 -0
  249. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts +16 -0
  250. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts.map +1 -0
  251. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts +13 -0
  252. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts.map +1 -0
  253. package/lib/typescript/ui/styles/authStyles.d.ts +1 -1
  254. package/package.json +10 -3
  255. package/src/models/interfaces.ts +7 -8
  256. package/src/models/session.ts +1 -4
  257. package/src/ui/components/AnimationExample.tsx +195 -0
  258. package/src/ui/components/FollowButton.tsx +65 -45
  259. package/src/ui/components/GroupedItem.tsx +1 -0
  260. package/src/ui/components/GroupedSection.tsx +1 -1
  261. package/src/ui/components/Header.tsx +37 -13
  262. package/src/ui/components/OxyPayButton.tsx +2 -2
  263. package/src/ui/components/OxyProvider.tsx +67 -33
  264. package/src/ui/components/ProfileCard.tsx +6 -8
  265. package/src/ui/components/Section.tsx +7 -7
  266. package/src/ui/components/SectionTitle.tsx +2 -2
  267. package/src/ui/components/StepBasedScreen.README.md +337 -0
  268. package/src/ui/components/StepBasedScreen.tsx +417 -0
  269. package/src/ui/components/icon/FAIRWalletIcon.tsx +2 -2
  270. package/src/ui/components/icon/OxyIcon.tsx +10 -11
  271. package/src/ui/components/index.ts +0 -1
  272. package/src/ui/components/internal/PinInput.tsx +13 -4
  273. package/src/ui/components/internal/TextField.tsx +12 -6
  274. package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +158 -0
  275. package/src/ui/context/OxyContext.tsx +90 -59
  276. package/src/ui/hooks/useFollow.types.ts +33 -0
  277. package/src/ui/navigation/OxyRouter.tsx +10 -0
  278. package/src/ui/navigation/types.ts +6 -0
  279. package/src/ui/screens/AccountCenterScreen.tsx +13 -7
  280. package/src/ui/screens/AccountOverviewScreen.tsx +3 -3
  281. package/src/ui/screens/AccountSettingsScreen.tsx +65 -13
  282. package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
  283. package/src/ui/screens/FeedbackScreen.tsx +57 -80
  284. package/src/ui/screens/FileManagementScreen.tsx +278 -175
  285. package/src/ui/screens/LanguageSelectorScreen.tsx +322 -0
  286. package/src/ui/screens/PaymentGatewayScreen.tsx +2 -2
  287. package/src/ui/screens/ProfileScreen.tsx +60 -55
  288. package/src/ui/screens/RecoverAccountScreen.tsx +98 -211
  289. package/src/ui/screens/SessionManagementScreen.tsx +148 -151
  290. package/src/ui/screens/SignInScreen.tsx +148 -290
  291. package/src/ui/screens/SignUpScreen.tsx +147 -751
  292. package/src/ui/screens/WelcomeNewUserScreen.tsx +272 -0
  293. package/src/ui/screens/internal/SignInPasswordStep.tsx +28 -13
  294. package/src/ui/screens/internal/SignInUsernameStep.tsx +21 -11
  295. package/src/ui/screens/karma/KarmaCenterScreen.tsx +1 -1
  296. package/src/ui/screens/steps/RecoverRequestStep.tsx +130 -0
  297. package/src/ui/screens/steps/RecoverSuccessStep.tsx +131 -0
  298. package/src/ui/screens/steps/RecoverVerifyStep.tsx +153 -0
  299. package/src/ui/screens/steps/SignInPasswordStep.tsx +172 -0
  300. package/src/ui/screens/steps/SignInUsernameStep.tsx +176 -0
  301. package/src/ui/screens/steps/SignUpIdentityStep.tsx +204 -0
  302. package/src/ui/screens/steps/SignUpSecurityStep.tsx +191 -0
  303. package/src/ui/screens/steps/SignUpSummaryStep.tsx +130 -0
  304. package/src/ui/screens/steps/SignUpWelcomeStep.tsx +65 -0
  305. package/src/ui/styles/authStyles.ts +1 -1
@@ -13,23 +13,22 @@ import {
13
13
  } from 'react-native';
14
14
  import type { BaseScreenProps } from '../navigation/types';
15
15
  import { useOxy } from '../context/OxyContext';
16
- import { fontFamilies } from '../styles/fonts';
17
16
  import { toast } from '../../lib/sonner';
18
- import { Ionicons } from '@expo/vector-icons';
19
- import OxyIcon from '../components/icon/OxyIcon';
20
17
  import type { ClientSession } from '../../models/session';
21
18
  import { confirmAction } from '../utils/confirmAction';
22
- import { Header } from '../components';
19
+ import { Header, GroupedSection } from '../components';
23
20
 
24
21
  const SessionManagementScreen: React.FC<BaseScreenProps> = ({
25
22
  onClose,
26
23
  theme,
27
24
  goBack,
28
25
  }) => {
29
- const { sessions: userSessions, activeSessionId, refreshSessions, logout, logoutAll, oxyServices } = useOxy();
26
+ const { sessions: userSessions, activeSessionId, refreshSessions, logout, logoutAll, switchSession } = useOxy();
30
27
  const [loading, setLoading] = useState(true);
31
28
  const [refreshing, setRefreshing] = useState(false);
32
29
  const [actionLoading, setActionLoading] = useState<string | null>(null);
30
+ const [switchLoading, setSwitchLoading] = useState<string | null>(null);
31
+ const [lastRefreshed, setLastRefreshed] = useState<Date | null>(null);
33
32
 
34
33
  const isDarkTheme = theme === 'dark';
35
34
  const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
@@ -49,6 +48,7 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
49
48
  }
50
49
 
51
50
  await refreshSessions();
51
+ setLastRefreshed(new Date());
52
52
  } catch (error) {
53
53
  console.error('Failed to load sessions:', error);
54
54
  if (Platform.OS === 'web') {
@@ -126,33 +126,36 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
126
126
  );
127
127
  };
128
128
 
129
- const formatDate = (dateString: string) => {
129
+ // Relative time formatter (past & future)
130
+ const formatRelative = (dateString?: string) => {
131
+ if (!dateString) return 'Unknown';
130
132
  const date = new Date(dateString);
131
133
  const now = new Date();
132
- const diffInMinutes = Math.floor((now.getTime() - date.getTime()) / (1000 * 60));
133
-
134
- if (diffInMinutes < 1) return 'Just now';
135
- if (diffInMinutes < 60) return `${diffInMinutes}m ago`;
136
- if (diffInMinutes < 1440) return `${Math.floor(diffInMinutes / 60)}h ago`;
137
- if (diffInMinutes < 10080) return `${Math.floor(diffInMinutes / 1440)}d ago`;
138
-
134
+ const diffMs = date.getTime() - now.getTime();
135
+ const absMin = Math.abs(diffMs) / 60000;
136
+ const isFuture = diffMs > 0;
137
+ const fmt = (n: number) => (n < 1 ? 'moments' : Math.floor(n));
138
+ if (absMin < 1) return isFuture ? 'in moments' : 'just now';
139
+ if (absMin < 60) return isFuture ? `in ${fmt(absMin)}m` : `${fmt(absMin)}m ago`;
140
+ const hrs = absMin / 60;
141
+ if (hrs < 24) return isFuture ? `in ${fmt(hrs)}h` : `${fmt(hrs)}h ago`;
142
+ const days = hrs / 24;
143
+ if (days < 7) return isFuture ? `in ${fmt(days)}d` : `${fmt(days)}d ago`;
139
144
  return date.toLocaleDateString();
140
145
  };
141
146
 
142
- const getDeviceIcon = (deviceType: string, platform: string) => {
143
- if (platform.toLowerCase().includes('ios') || platform.toLowerCase().includes('iphone')) {
144
- return '📱';
145
- }
146
- if (platform.toLowerCase().includes('android')) {
147
- return '📱';
148
- }
149
- if (deviceType.toLowerCase().includes('mobile')) {
150
- return '📱';
151
- }
152
- if (deviceType.toLowerCase().includes('tablet')) {
153
- return '📱';
147
+ const handleSwitchSession = async (sessionId: string) => {
148
+ if (sessionId === activeSessionId) return;
149
+ setSwitchLoading(sessionId);
150
+ try {
151
+ await switchSession(sessionId);
152
+ toast.success('Switched session');
153
+ } catch (e) {
154
+ console.error('Switch session failed', e);
155
+ toast.error('Failed to switch session');
156
+ } finally {
157
+ setSwitchLoading(null);
154
158
  }
155
- return '💻'; // Desktop/web
156
159
  };
157
160
 
158
161
  useEffect(() => {
@@ -168,6 +171,85 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
168
171
  );
169
172
  }
170
173
 
174
+ // Build grouped section items for sessions
175
+ const sessionItems = userSessions.map((session: ClientSession) => {
176
+ const isCurrent = session.sessionId === activeSessionId;
177
+ const subtitleParts: string[] = [];
178
+ if (session.deviceId) subtitleParts.push(`Device ${session.deviceId.substring(0, 10)}...`);
179
+ subtitleParts.push(`Last ${formatRelative(session.lastActive)}`);
180
+ subtitleParts.push(`Expires ${formatRelative(session.expiresAt)}`);
181
+
182
+ return {
183
+ id: session.sessionId,
184
+ icon: isCurrent ? 'shield-checkmark' : 'laptop-outline',
185
+ iconColor: isCurrent ? successColor : primaryColor,
186
+ title: isCurrent ? 'Current Session' : `Session ${session.sessionId.substring(0, 8)}...`,
187
+ subtitle: subtitleParts.join(' \u2022 '),
188
+ showChevron: false,
189
+ multiRow: true,
190
+ customContentBelow: !isCurrent ? (
191
+ <View style={styles.sessionActionsRow}>
192
+ <TouchableOpacity
193
+ onPress={() => handleSwitchSession(session.sessionId)}
194
+ style={[styles.sessionPillButton, { backgroundColor: isDarkTheme ? '#1E2A38' : '#E6F2FF', borderColor: primaryColor }]}
195
+ disabled={switchLoading === session.sessionId || actionLoading === session.sessionId}
196
+ >
197
+ {switchLoading === session.sessionId ? (
198
+ <ActivityIndicator size="small" color={primaryColor} />
199
+ ) : (
200
+ <Text style={[styles.sessionPillText, { color: primaryColor }]}>Switch</Text>
201
+ )}
202
+ </TouchableOpacity>
203
+ <TouchableOpacity
204
+ onPress={() => handleLogoutSession(session.sessionId)}
205
+ style={[styles.sessionPillButton, { backgroundColor: isDarkTheme ? '#3A1E1E' : '#FFEBEE', borderColor: dangerColor }]}
206
+ disabled={actionLoading === session.sessionId || switchLoading === session.sessionId}
207
+ >
208
+ {actionLoading === session.sessionId ? (
209
+ <ActivityIndicator size="small" color={dangerColor} />
210
+ ) : (
211
+ <Text style={[styles.sessionPillText, { color: dangerColor }]}>Logout</Text>
212
+ )}
213
+ </TouchableOpacity>
214
+ </View>
215
+ ) : (
216
+ <View style={styles.sessionActionsRow}>
217
+ <Text style={[styles.currentBadgeText, { color: successColor }]}>Active</Text>
218
+ </View>
219
+ ),
220
+ selected: isCurrent,
221
+ dense: true,
222
+ };
223
+ });
224
+
225
+ // Bulk actions as grouped section items
226
+ const bulkItems = [
227
+ {
228
+ id: 'logout-others',
229
+ icon: 'exit-outline',
230
+ iconColor: primaryColor,
231
+ title: 'Logout Other Sessions',
232
+ subtitle: userSessions.filter(s => s.sessionId !== activeSessionId).length === 0 ? 'No other sessions' : 'End all sessions except this one',
233
+ onPress: handleLogoutOtherSessions,
234
+ showChevron: false,
235
+ customContent: actionLoading === 'others' ? <ActivityIndicator size="small" color={primaryColor} /> : undefined,
236
+ disabled: actionLoading === 'others' || userSessions.filter(s => s.sessionId !== activeSessionId).length === 0,
237
+ dense: true,
238
+ },
239
+ {
240
+ id: 'logout-all',
241
+ icon: 'warning-outline',
242
+ iconColor: dangerColor,
243
+ title: 'Logout All Sessions',
244
+ subtitle: 'End all sessions including this one',
245
+ onPress: handleLogoutAllSessions,
246
+ showChevron: false,
247
+ customContent: actionLoading === 'all' ? <ActivityIndicator size="small" color={dangerColor} /> : undefined,
248
+ disabled: actionLoading === 'all',
249
+ dense: true,
250
+ },
251
+ ];
252
+
171
253
  return (
172
254
  <View style={[styles.container, { backgroundColor }]}>
173
255
  <Header
@@ -190,72 +272,15 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
190
272
  >
191
273
  {userSessions.length > 0 ? (
192
274
  <>
193
- {userSessions.map((session: ClientSession) => (
194
- <View
195
- key={session.sessionId}
196
- style={[
197
- styles.sessionCard,
198
- {
199
- backgroundColor: secondaryBackgroundColor,
200
- borderColor,
201
- borderLeftColor: session.sessionId === activeSessionId ? successColor : borderColor,
202
- },
203
- ]}
204
- >
205
- <View style={styles.sessionHeader}>
206
- <View style={styles.sessionTitleRow}>
207
- <Text style={styles.deviceIcon}>💻</Text>
208
- <View style={styles.sessionTitleText}>
209
- <Text style={[styles.deviceName, { color: textColor }]}>Session {session.sessionId.substring(0, 8)}...</Text>
210
- {session.sessionId === activeSessionId && (
211
- <Text style={[styles.currentBadge, { color: successColor }]}>Current Session</Text>
212
- )}
213
- </View>
214
- </View>
215
- </View>
216
- <View style={styles.sessionDetails}>
217
- <Text style={[styles.sessionDetail, { color: isDarkTheme ? '#BBBBBB' : '#666666' }]}>Device ID: {session.deviceId ? session.deviceId.substring(0, 12) + '...' : 'Unknown'}</Text>
218
- <Text style={[styles.sessionDetail, { color: isDarkTheme ? '#BBBBBB' : '#666666' }]}>Last active: {session.lastActive ? new Date(session.lastActive).toLocaleDateString() : 'Unknown'}</Text>
219
- <Text style={[styles.sessionDetail, { color: isDarkTheme ? '#BBBBBB' : '#666666' }]}>Expires: {session.expiresAt ? new Date(session.expiresAt).toLocaleDateString() : 'Unknown'}</Text>
220
- </View>
221
- {session.sessionId !== activeSessionId && (
222
- <TouchableOpacity
223
- style={[styles.logoutButton, { backgroundColor: isDarkTheme ? '#400000' : '#FFEBEE' }]}
224
- onPress={() => handleLogoutSession(session.sessionId)}
225
- disabled={actionLoading === session.sessionId}
226
- >
227
- {actionLoading === session.sessionId ? (
228
- <ActivityIndicator size="small" color={dangerColor} />
229
- ) : (
230
- <Text style={[styles.logoutButtonText, { color: dangerColor }]}>Logout</Text>
231
- )}
232
- </TouchableOpacity>
233
- )}
234
- </View>
235
- ))}
236
- <View style={styles.bulkActions}>
237
- <TouchableOpacity
238
- style={[styles.bulkActionButton, { backgroundColor: isDarkTheme ? '#1A1A1A' : '#F0F0F0', borderColor }]}
239
- onPress={handleLogoutOtherSessions}
240
- disabled={actionLoading === 'others' || userSessions.filter(s => s.sessionId !== activeSessionId).length === 0}
241
- >
242
- {actionLoading === 'others' ? (
243
- <ActivityIndicator size="small" color={primaryColor} />
244
- ) : (
245
- <Text style={[styles.bulkActionButtonText, { color: textColor }]}>Logout Other Sessions</Text>
246
- )}
247
- </TouchableOpacity>
248
- <TouchableOpacity
249
- style={[styles.bulkActionButton, styles.dangerButton, { backgroundColor: isDarkTheme ? '#400000' : '#FFEBEE' }]}
250
- onPress={handleLogoutAllSessions}
251
- disabled={actionLoading === 'all'}
252
- >
253
- {actionLoading === 'all' ? (
254
- <ActivityIndicator size="small" color={dangerColor} />
255
- ) : (
256
- <Text style={[styles.bulkActionButtonText, { color: dangerColor }]}>Logout All Sessions</Text>
257
- )}
258
- </TouchableOpacity>
275
+ {lastRefreshed && (
276
+ <Text style={[styles.metaText, { color: isDarkTheme ? '#777' : '#777', marginBottom: 6 }]}>Last refreshed {formatRelative(lastRefreshed.toISOString())}</Text>
277
+ )}
278
+ <View style={styles.fullBleed}>
279
+ <GroupedSection items={sessionItems} theme={theme as 'light' | 'dark'} />
280
+ </View>
281
+ <View style={{ height: 12 }} />
282
+ <View style={styles.fullBleed}>
283
+ <GroupedSection items={bulkItems} theme={theme as 'light' | 'dark'} />
259
284
  </View>
260
285
  </>
261
286
  ) : (
@@ -290,74 +315,46 @@ const styles = StyleSheet.create({
290
315
  padding: 20,
291
316
  paddingTop: 0,
292
317
  },
293
- sessionCard: {
294
- borderRadius: 12,
295
- borderWidth: 1,
296
- borderLeftWidth: 4,
297
- padding: 16,
298
- marginBottom: 12,
299
- },
300
- sessionHeader: {
301
- marginBottom: 12,
318
+ // Removed legacy session card & bulk action styles (now using GroupedSection)
319
+ sessionActionsRow: {
320
+ flexDirection: 'row',
321
+ gap: 8,
322
+ marginTop: 6,
302
323
  },
303
- sessionTitleRow: {
324
+ sessionPillButton: {
325
+ paddingHorizontal: 14,
326
+ paddingVertical: 6,
327
+ borderRadius: 20,
328
+ borderWidth: 1,
304
329
  flexDirection: 'row',
305
330
  alignItems: 'center',
306
331
  },
307
- deviceIcon: {
308
- fontSize: 20,
309
- marginRight: 12,
310
- },
311
- sessionTitleText: {
312
- flex: 1,
313
- },
314
- deviceName: {
315
- fontSize: 16,
332
+ sessionPillText: {
333
+ fontSize: 12,
316
334
  fontWeight: '600',
317
- marginBottom: 2,
335
+ letterSpacing: 0.3,
336
+ textTransform: 'uppercase',
318
337
  },
319
- currentBadge: {
338
+ currentBadgeText: {
320
339
  fontSize: 12,
321
- fontWeight: '500',
322
- },
323
- sessionDetails: {
324
- marginBottom: 12,
325
- },
326
- sessionDetail: {
327
- fontSize: 14,
328
- marginBottom: 2,
329
- },
330
- logoutButton: {
331
- paddingVertical: 8,
332
- paddingHorizontal: 16,
333
- borderRadius: 6,
334
- alignItems: 'center',
335
- alignSelf: 'flex-start',
336
- },
337
- logoutButtonText: {
338
- fontSize: 14,
339
- fontWeight: '500',
340
- },
341
- bulkActions: {
342
- marginTop: 20,
343
- paddingTop: 20,
344
- borderTopWidth: 1,
345
- borderTopColor: '#E0E0E0',
346
- },
347
- bulkActionButton: {
348
- paddingVertical: 12,
349
- paddingHorizontal: 20,
350
- borderRadius: 8,
351
- borderWidth: 1,
352
- alignItems: 'center',
353
- marginBottom: 12,
340
+ fontWeight: '600',
341
+ paddingHorizontal: 10,
342
+ paddingVertical: 4,
343
+ backgroundColor: '#2E7D3215',
344
+ borderRadius: 16,
345
+ overflow: 'hidden',
346
+ textTransform: 'uppercase',
347
+ letterSpacing: 0.5,
354
348
  },
355
- dangerButton: {
356
- borderColor: 'transparent',
349
+ metaText: {
350
+ fontSize: 12,
351
+ textTransform: 'uppercase',
352
+ letterSpacing: 0.5,
353
+ fontWeight: '600',
357
354
  },
358
- bulkActionButtonText: {
359
- fontSize: 16,
360
- fontWeight: '500',
355
+ fullBleed: {
356
+ width: '100%',
357
+ alignSelf: 'stretch',
361
358
  },
362
359
  emptyState: {
363
360
  alignItems: 'center',