@oxyhq/services 6.9.45 → 6.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (916) hide show
  1. package/lib/commonjs/index.js +36 -13
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/client.js +0 -20
  4. package/lib/commonjs/ui/client.js.map +1 -1
  5. package/lib/commonjs/ui/components/ActingAsBanner.js +0 -4
  6. package/lib/commonjs/ui/components/ActingAsBanner.js.map +1 -1
  7. package/lib/commonjs/ui/components/ActivityIndicator.js +1 -1
  8. package/lib/commonjs/ui/components/ActivityIndicator.js.map +1 -1
  9. package/lib/commonjs/ui/components/Avatar.js +0 -2
  10. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  11. package/lib/commonjs/ui/components/BottomSheet.js +33 -398
  12. package/lib/commonjs/ui/components/BottomSheet.js.map +1 -1
  13. package/lib/commonjs/ui/components/BottomSheetRouter.js +8 -0
  14. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  15. package/lib/commonjs/ui/components/FollowButton.js +3 -5
  16. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  17. package/lib/commonjs/ui/components/Header.js +0 -5
  18. package/lib/commonjs/ui/components/Header.js.map +1 -1
  19. package/lib/commonjs/ui/components/Icon.js +6 -7
  20. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  21. package/lib/commonjs/ui/components/IconButton/IconButton.js +1 -5
  22. package/lib/commonjs/ui/components/IconButton/IconButton.js.map +1 -1
  23. package/lib/commonjs/ui/components/OxyPayButton.js +0 -2
  24. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  25. package/lib/commonjs/ui/components/OxyProvider.js +102 -38
  26. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  27. package/lib/commonjs/ui/components/OxySignInButton.js +23 -9
  28. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  29. package/lib/commonjs/ui/components/ProfileCard.js +11 -8
  30. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  31. package/lib/commonjs/ui/components/QuickActions.js +2 -2
  32. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  33. package/lib/commonjs/ui/components/SignInModal.js +37 -13
  34. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  35. package/lib/commonjs/ui/components/StepBasedScreen.js +0 -2
  36. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
  37. package/lib/commonjs/ui/components/TextField.js +0 -1
  38. package/lib/commonjs/ui/components/TextField.js.map +1 -1
  39. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js +1 -1
  40. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js.map +1 -1
  41. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +0 -2
  42. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -1
  43. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +0 -2
  44. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  45. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +80 -76
  46. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  47. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +30 -23
  48. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  49. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +18 -23
  50. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  51. package/lib/commonjs/ui/components/fileManagement/styles.js +213 -25
  52. package/lib/commonjs/ui/components/fileManagement/styles.js.map +1 -1
  53. package/lib/commonjs/ui/components/index.js +0 -35
  54. package/lib/commonjs/ui/components/index.js.map +1 -1
  55. package/lib/commonjs/ui/components/logo/LogoIcon.js +63 -0
  56. package/lib/commonjs/ui/components/logo/LogoIcon.js.map +1 -0
  57. package/lib/commonjs/ui/components/logo/LogoText.js +50 -0
  58. package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -0
  59. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +54 -88
  60. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  61. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +28 -15
  62. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  63. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +50 -28
  64. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  65. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +83 -48
  66. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  67. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +12 -11
  68. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  69. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +38 -23
  70. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  71. package/lib/commonjs/ui/components/payment/paymentStyles.js +2 -10
  72. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
  73. package/lib/commonjs/ui/components/styles/overlay.js +7 -9
  74. package/lib/commonjs/ui/components/styles/overlay.js.map +1 -1
  75. package/lib/commonjs/ui/components/theming.js +0 -1
  76. package/lib/commonjs/ui/components/theming.js.map +1 -1
  77. package/lib/commonjs/ui/context/OxyContext.js +34 -21
  78. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  79. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +1 -2
  80. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  81. package/lib/commonjs/ui/hooks/index.js +32 -12
  82. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  83. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +10 -5
  84. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  85. package/lib/commonjs/ui/hooks/mutations/mutationKeys.js +34 -0
  86. package/lib/commonjs/ui/hooks/mutations/mutationKeys.js.map +1 -0
  87. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +235 -57
  88. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  89. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +17 -13
  90. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  91. package/lib/commonjs/ui/hooks/queries/index.js +6 -0
  92. package/lib/commonjs/ui/hooks/queries/index.js.map +1 -1
  93. package/lib/commonjs/ui/hooks/queries/queryKeys.js +2 -1
  94. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  95. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +80 -3
  96. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  97. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +36 -1
  98. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  99. package/lib/commonjs/ui/hooks/queryClient.js +168 -70
  100. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  101. package/lib/commonjs/ui/hooks/useAsyncAction.js +7 -7
  102. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  103. package/lib/commonjs/ui/hooks/useAuth.js +0 -8
  104. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  105. package/lib/commonjs/ui/hooks/useAvatarPicker.js +71 -20
  106. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  107. package/lib/commonjs/ui/hooks/useFileDownloadUrl.js +12 -41
  108. package/lib/commonjs/ui/hooks/useFileDownloadUrl.js.map +1 -1
  109. package/lib/commonjs/ui/hooks/useMutationStatus.js +86 -0
  110. package/lib/commonjs/ui/hooks/useMutationStatus.js.map +1 -0
  111. package/lib/commonjs/ui/hooks/useOnlineStatus.js +33 -0
  112. package/lib/commonjs/ui/hooks/useOnlineStatus.js.map +1 -0
  113. package/lib/commonjs/ui/hooks/useSessionSocket.js +101 -130
  114. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  115. package/lib/commonjs/ui/hooks/useSettingToggle.js +4 -4
  116. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  117. package/lib/commonjs/ui/index.js +1 -11
  118. package/lib/commonjs/ui/index.js.map +1 -1
  119. package/lib/commonjs/ui/navigation/routes.js +55 -3
  120. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  121. package/lib/commonjs/ui/screens/AccountCenterScreen.js +17 -19
  122. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  123. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +131 -162
  124. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  125. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +110 -87
  126. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  127. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +268 -216
  128. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  129. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +23 -23
  130. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  131. package/lib/commonjs/ui/screens/AppInfoScreen.js +22 -23
  132. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  133. package/lib/commonjs/ui/screens/AvatarCropScreen.js +939 -0
  134. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -0
  135. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js +13 -20
  136. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  137. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +10 -13
  138. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  139. package/lib/commonjs/ui/screens/FAQScreen.js +4 -4
  140. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  141. package/lib/commonjs/ui/screens/FeedbackScreen.js +74 -66
  142. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  143. package/lib/commonjs/ui/screens/FileManagementScreen.js +822 -195
  144. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  145. package/lib/commonjs/ui/screens/HelpSupportScreen.js +8 -9
  146. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  147. package/lib/commonjs/ui/screens/HistoryViewScreen.js +58 -50
  148. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  149. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +18 -13
  150. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  151. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +63 -57
  152. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  153. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +14 -11
  154. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  155. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +75 -73
  156. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  157. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +185 -205
  158. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  159. package/lib/commonjs/ui/screens/ProfileScreen.js +4 -3
  160. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  161. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +23 -25
  162. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  163. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +16 -17
  164. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  165. package/lib/commonjs/ui/screens/SessionManagementScreen.js +83 -60
  166. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  167. package/lib/commonjs/ui/screens/UserLinksScreen.js +14 -31
  168. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  169. package/lib/commonjs/ui/screens/UserListScreen.js +39 -22
  170. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  171. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +128 -73
  172. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  173. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +0 -3
  174. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  175. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +6 -10
  176. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  177. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +4 -6
  178. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  179. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +6 -6
  180. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  181. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +13 -19
  182. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  183. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +5 -5
  184. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  185. package/lib/commonjs/ui/server.js +0 -5
  186. package/lib/commonjs/ui/server.js.map +1 -1
  187. package/lib/commonjs/ui/styles/authStyles.js +0 -5
  188. package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
  189. package/lib/commonjs/ui/styles/index.js +0 -11
  190. package/lib/commonjs/ui/styles/index.js.map +1 -1
  191. package/lib/commonjs/ui/styles/spacing.js +1 -42
  192. package/lib/commonjs/ui/styles/spacing.js.map +1 -1
  193. package/lib/commonjs/ui/styles/theme.js +0 -4
  194. package/lib/commonjs/ui/styles/theme.js.map +1 -1
  195. package/lib/commonjs/ui/utils/fileManagement.js +58 -39
  196. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  197. package/lib/commonjs/ui/utils/sessionHelpers.js +3 -1
  198. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  199. package/lib/commonjs/ui/utils/userUtils.js +33 -16
  200. package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
  201. package/lib/module/index.js +9 -5
  202. package/lib/module/index.js.map +1 -1
  203. package/lib/module/ui/client.js +0 -6
  204. package/lib/module/ui/client.js.map +1 -1
  205. package/lib/module/ui/components/ActingAsBanner.js +0 -4
  206. package/lib/module/ui/components/ActingAsBanner.js.map +1 -1
  207. package/lib/module/ui/components/ActivityIndicator.js +1 -1
  208. package/lib/module/ui/components/ActivityIndicator.js.map +1 -1
  209. package/lib/module/ui/components/Avatar.js +0 -2
  210. package/lib/module/ui/components/Avatar.js.map +1 -1
  211. package/lib/module/ui/components/BottomSheet.js +35 -400
  212. package/lib/module/ui/components/BottomSheet.js.map +1 -1
  213. package/lib/module/ui/components/BottomSheetRouter.js +9 -1
  214. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  215. package/lib/module/ui/components/FollowButton.js +2 -4
  216. package/lib/module/ui/components/FollowButton.js.map +1 -1
  217. package/lib/module/ui/components/Header.js +0 -5
  218. package/lib/module/ui/components/Header.js.map +1 -1
  219. package/lib/module/ui/components/Icon.js +6 -7
  220. package/lib/module/ui/components/Icon.js.map +1 -1
  221. package/lib/module/ui/components/IconButton/IconButton.js +1 -5
  222. package/lib/module/ui/components/IconButton/IconButton.js.map +1 -1
  223. package/lib/module/ui/components/OxyPayButton.js +0 -2
  224. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  225. package/lib/module/ui/components/OxyProvider.js +105 -41
  226. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  227. package/lib/module/ui/components/OxySignInButton.js +23 -9
  228. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  229. package/lib/module/ui/components/ProfileCard.js +11 -8
  230. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  231. package/lib/module/ui/components/QuickActions.js +2 -2
  232. package/lib/module/ui/components/QuickActions.js.map +1 -1
  233. package/lib/module/ui/components/SignInModal.js +37 -13
  234. package/lib/module/ui/components/SignInModal.js.map +1 -1
  235. package/lib/module/ui/components/StepBasedScreen.js +0 -2
  236. package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
  237. package/lib/module/ui/components/TextField.js +0 -1
  238. package/lib/module/ui/components/TextField.js.map +1 -1
  239. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js +1 -1
  240. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js.map +1 -1
  241. package/lib/module/ui/components/feedback/feedbackStyles.js +0 -2
  242. package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -1
  243. package/lib/module/ui/components/fileManagement/AnimatedButton.js +0 -1
  244. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  245. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +80 -75
  246. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  247. package/lib/module/ui/components/fileManagement/FileViewer.js +30 -22
  248. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  249. package/lib/module/ui/components/fileManagement/UploadPreview.js +18 -22
  250. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  251. package/lib/module/ui/components/fileManagement/styles.js +212 -24
  252. package/lib/module/ui/components/fileManagement/styles.js.map +1 -1
  253. package/lib/module/ui/components/index.js +0 -5
  254. package/lib/module/ui/components/index.js.map +1 -1
  255. package/lib/module/ui/components/logo/LogoIcon.js +56 -0
  256. package/lib/module/ui/components/logo/LogoIcon.js.map +1 -0
  257. package/lib/module/ui/components/logo/LogoText.js +43 -0
  258. package/lib/module/ui/components/logo/LogoText.js.map +1 -0
  259. package/lib/module/ui/components/modals/DeleteAccountModal.js +55 -88
  260. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  261. package/lib/module/ui/components/payment/PaymentDetailsStep.js +27 -14
  262. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  263. package/lib/module/ui/components/payment/PaymentMethodStep.js +49 -26
  264. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  265. package/lib/module/ui/components/payment/PaymentReviewStep.js +84 -48
  266. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  267. package/lib/module/ui/components/payment/PaymentSuccessStep.js +12 -10
  268. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  269. package/lib/module/ui/components/payment/PaymentSummaryStep.js +38 -22
  270. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  271. package/lib/module/ui/components/payment/paymentStyles.js +2 -10
  272. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
  273. package/lib/module/ui/components/styles/overlay.js +8 -8
  274. package/lib/module/ui/components/styles/overlay.js.map +1 -1
  275. package/lib/module/ui/components/theming.js +0 -1
  276. package/lib/module/ui/components/theming.js.map +1 -1
  277. package/lib/module/ui/context/OxyContext.js +32 -19
  278. package/lib/module/ui/context/OxyContext.js.map +1 -1
  279. package/lib/module/ui/context/hooks/useAuthOperations.js +1 -2
  280. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  281. package/lib/module/ui/hooks/index.js +5 -3
  282. package/lib/module/ui/hooks/index.js.map +1 -1
  283. package/lib/module/ui/hooks/mutations/mutationFactory.js +6 -1
  284. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  285. package/lib/module/ui/hooks/mutations/mutationKeys.js +30 -0
  286. package/lib/module/ui/hooks/mutations/mutationKeys.js.map +1 -0
  287. package/lib/module/ui/hooks/mutations/useAccountMutations.js +231 -52
  288. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  289. package/lib/module/ui/hooks/mutations/useServicesMutations.js +9 -5
  290. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  291. package/lib/module/ui/hooks/queries/index.js +1 -1
  292. package/lib/module/ui/hooks/queries/index.js.map +1 -1
  293. package/lib/module/ui/hooks/queries/queryKeys.js +2 -1
  294. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  295. package/lib/module/ui/hooks/queries/useAccountQueries.js +80 -3
  296. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  297. package/lib/module/ui/hooks/queries/useSecurityQueries.js +35 -1
  298. package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  299. package/lib/module/ui/hooks/queryClient.js +166 -68
  300. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  301. package/lib/module/ui/hooks/useAsyncAction.js +3 -3
  302. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  303. package/lib/module/ui/hooks/useAuth.js +0 -3
  304. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  305. package/lib/module/ui/hooks/useAvatarPicker.js +73 -22
  306. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  307. package/lib/module/ui/hooks/useFileDownloadUrl.js +11 -39
  308. package/lib/module/ui/hooks/useFileDownloadUrl.js.map +1 -1
  309. package/lib/module/ui/hooks/useMutationStatus.js +82 -0
  310. package/lib/module/ui/hooks/useMutationStatus.js.map +1 -0
  311. package/lib/module/ui/hooks/useOnlineStatus.js +29 -0
  312. package/lib/module/ui/hooks/useOnlineStatus.js.map +1 -0
  313. package/lib/module/ui/hooks/useSessionSocket.js +101 -130
  314. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  315. package/lib/module/ui/hooks/useSettingToggle.js +1 -1
  316. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  317. package/lib/module/ui/index.js +1 -10
  318. package/lib/module/ui/index.js.map +1 -1
  319. package/lib/module/ui/navigation/routes.js +54 -2
  320. package/lib/module/ui/navigation/routes.js.map +1 -1
  321. package/lib/module/ui/screens/AccountCenterScreen.js +16 -17
  322. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  323. package/lib/module/ui/screens/AccountOverviewScreen.js +117 -148
  324. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  325. package/lib/module/ui/screens/AccountSettingsScreen.js +109 -86
  326. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  327. package/lib/module/ui/screens/AccountSwitcherScreen.js +254 -201
  328. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  329. package/lib/module/ui/screens/AccountVerificationScreen.js +21 -21
  330. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  331. package/lib/module/ui/screens/AppInfoScreen.js +14 -15
  332. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  333. package/lib/module/ui/screens/AvatarCropScreen.js +936 -0
  334. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -0
  335. package/lib/module/ui/screens/CreateManagedAccountScreen.js +11 -18
  336. package/lib/module/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  337. package/lib/module/ui/screens/EditProfileFieldScreen.js +8 -11
  338. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  339. package/lib/module/ui/screens/FAQScreen.js +3 -3
  340. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  341. package/lib/module/ui/screens/FeedbackScreen.js +62 -54
  342. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  343. package/lib/module/ui/screens/FileManagementScreen.js +789 -161
  344. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  345. package/lib/module/ui/screens/HelpSupportScreen.js +2 -3
  346. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  347. package/lib/module/ui/screens/HistoryViewScreen.js +56 -47
  348. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  349. package/lib/module/ui/screens/LanguageSelectorScreen.js +17 -12
  350. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  351. package/lib/module/ui/screens/LegalDocumentsScreen.js +62 -56
  352. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  353. package/lib/module/ui/screens/PaymentGatewayScreen.js +14 -11
  354. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  355. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +60 -57
  356. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  357. package/lib/module/ui/screens/PrivacySettingsScreen.js +182 -202
  358. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  359. package/lib/module/ui/screens/ProfileScreen.js +4 -3
  360. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  361. package/lib/module/ui/screens/SavesCollectionsScreen.js +23 -25
  362. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  363. package/lib/module/ui/screens/SearchSettingsScreen.js +17 -18
  364. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  365. package/lib/module/ui/screens/SessionManagementScreen.js +75 -52
  366. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  367. package/lib/module/ui/screens/UserLinksScreen.js +16 -33
  368. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  369. package/lib/module/ui/screens/UserListScreen.js +40 -23
  370. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  371. package/lib/module/ui/screens/WelcomeNewUserScreen.js +126 -71
  372. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  373. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +0 -3
  374. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  375. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +6 -10
  376. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  377. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +5 -7
  378. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  379. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +6 -6
  380. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  381. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +13 -19
  382. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  383. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +5 -5
  384. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  385. package/lib/module/ui/server.js +0 -4
  386. package/lib/module/ui/server.js.map +1 -1
  387. package/lib/module/ui/styles/authStyles.js +0 -5
  388. package/lib/module/ui/styles/authStyles.js.map +1 -1
  389. package/lib/module/ui/styles/index.js +0 -1
  390. package/lib/module/ui/styles/index.js.map +1 -1
  391. package/lib/module/ui/styles/spacing.js +0 -42
  392. package/lib/module/ui/styles/spacing.js.map +1 -1
  393. package/lib/module/ui/styles/theme.js +0 -4
  394. package/lib/module/ui/styles/theme.js.map +1 -1
  395. package/lib/module/ui/utils/fileManagement.js +54 -36
  396. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  397. package/lib/module/ui/utils/sessionHelpers.js +3 -1
  398. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  399. package/lib/module/ui/utils/userUtils.js +34 -16
  400. package/lib/module/ui/utils/userUtils.js.map +1 -1
  401. package/lib/typescript/commonjs/index.d.ts +7 -3
  402. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  403. package/lib/typescript/commonjs/ui/client.d.ts +0 -2
  404. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  405. package/lib/typescript/commonjs/ui/components/ActingAsBanner.d.ts.map +1 -1
  406. package/lib/typescript/commonjs/ui/components/Avatar.d.ts.map +1 -1
  407. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts +27 -27
  408. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +1 -1
  409. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
  410. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  411. package/lib/typescript/commonjs/ui/components/Header.d.ts.map +1 -1
  412. package/lib/typescript/commonjs/ui/components/Icon.d.ts +3 -2
  413. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +1 -1
  414. package/lib/typescript/commonjs/ui/components/IconButton/IconButton.d.ts.map +1 -1
  415. package/lib/typescript/commonjs/ui/components/OxyPayButton.d.ts.map +1 -1
  416. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  417. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  418. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts +4 -1
  419. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts.map +1 -1
  420. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  421. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts.map +1 -1
  422. package/lib/typescript/commonjs/ui/components/TextField/Addons/Outline.d.ts +2 -2
  423. package/lib/typescript/commonjs/ui/components/TextField/helpers.d.ts +2 -2
  424. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts +0 -1
  425. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts.map +1 -1
  426. package/lib/typescript/commonjs/ui/components/TextField.d.ts +1 -1
  427. package/lib/typescript/commonjs/ui/components/TextField.d.ts.map +1 -1
  428. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts +0 -1
  429. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +1 -1
  430. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  431. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts +1 -1
  432. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  433. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts +0 -2
  434. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  435. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts +3 -2
  436. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  437. package/lib/typescript/commonjs/ui/components/fileManagement/styles.d.ts +200 -17
  438. package/lib/typescript/commonjs/ui/components/fileManagement/styles.d.ts.map +1 -1
  439. package/lib/typescript/commonjs/ui/components/index.d.ts +0 -5
  440. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  441. package/lib/typescript/commonjs/ui/components/logo/LogoIcon.d.ts +22 -0
  442. package/lib/typescript/commonjs/ui/components/logo/LogoIcon.d.ts.map +1 -0
  443. package/lib/typescript/commonjs/ui/components/logo/LogoText.d.ts +22 -0
  444. package/lib/typescript/commonjs/ui/components/logo/LogoText.d.ts.map +1 -0
  445. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts +2 -2
  446. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  447. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  448. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  449. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  450. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  451. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  452. package/lib/typescript/commonjs/ui/components/payment/paymentStyles.d.ts +0 -7
  453. package/lib/typescript/commonjs/ui/components/payment/paymentStyles.d.ts.map +1 -1
  454. package/lib/typescript/commonjs/ui/components/styles/overlay.d.ts +3 -1
  455. package/lib/typescript/commonjs/ui/components/styles/overlay.d.ts.map +1 -1
  456. package/lib/typescript/commonjs/ui/components/theming.d.ts.map +1 -1
  457. package/lib/typescript/commonjs/ui/components/types.d.ts.map +1 -1
  458. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  459. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  460. package/lib/typescript/commonjs/ui/hooks/index.d.ts +5 -3
  461. package/lib/typescript/commonjs/ui/hooks/index.d.ts.map +1 -1
  462. package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts +11 -0
  463. package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
  464. package/lib/typescript/commonjs/ui/hooks/mutations/mutationKeys.d.ts +25 -0
  465. package/lib/typescript/commonjs/ui/hooks/mutations/mutationKeys.d.ts.map +1 -0
  466. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +161 -9
  467. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  468. package/lib/typescript/commonjs/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -1
  469. package/lib/typescript/commonjs/ui/hooks/queries/index.d.ts +1 -1
  470. package/lib/typescript/commonjs/ui/hooks/queries/index.d.ts.map +1 -1
  471. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +1 -0
  472. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  473. package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts +22 -8
  474. package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  475. package/lib/typescript/commonjs/ui/hooks/queries/useSecurityQueries.d.ts +13 -3
  476. package/lib/typescript/commonjs/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
  477. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts +7 -5
  478. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  479. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts +57 -9
  480. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  481. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts +1 -1
  482. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +0 -1
  483. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  484. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts +10 -2
  485. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  486. package/lib/typescript/commonjs/ui/hooks/useFileDownloadUrl.d.ts +2 -6
  487. package/lib/typescript/commonjs/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
  488. package/lib/typescript/commonjs/ui/hooks/useMutationStatus.d.ts +23 -0
  489. package/lib/typescript/commonjs/ui/hooks/useMutationStatus.d.ts.map +1 -0
  490. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts +13 -0
  491. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts.map +1 -0
  492. package/lib/typescript/commonjs/ui/hooks/useSessionSocket.d.ts +1 -2
  493. package/lib/typescript/commonjs/ui/hooks/useSessionSocket.d.ts.map +1 -1
  494. package/lib/typescript/commonjs/ui/index.d.ts +1 -4
  495. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  496. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +1 -1
  497. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  498. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +48 -2
  499. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  500. package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  501. package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  502. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  503. package/lib/typescript/commonjs/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  504. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  505. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  506. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts +49 -0
  507. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -0
  508. package/lib/typescript/commonjs/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  509. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  510. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  511. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  512. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  513. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  514. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  515. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  516. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  517. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  518. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  519. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  520. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  521. package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  522. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  523. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  524. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  525. package/lib/typescript/commonjs/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  526. package/lib/typescript/commonjs/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  527. package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  528. package/lib/typescript/commonjs/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  529. package/lib/typescript/commonjs/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  530. package/lib/typescript/commonjs/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  531. package/lib/typescript/commonjs/ui/server.d.ts +0 -2
  532. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  533. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts +0 -4
  534. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts.map +1 -1
  535. package/lib/typescript/commonjs/ui/styles/index.d.ts +0 -1
  536. package/lib/typescript/commonjs/ui/styles/index.d.ts.map +1 -1
  537. package/lib/typescript/commonjs/ui/styles/spacing.d.ts +0 -36
  538. package/lib/typescript/commonjs/ui/styles/spacing.d.ts.map +1 -1
  539. package/lib/typescript/commonjs/ui/styles/theme.d.ts +0 -1
  540. package/lib/typescript/commonjs/ui/styles/theme.d.ts.map +1 -1
  541. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +39 -12
  542. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  543. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +3 -1
  544. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
  545. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts +19 -18
  546. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
  547. package/lib/typescript/module/index.d.ts +7 -3
  548. package/lib/typescript/module/index.d.ts.map +1 -1
  549. package/lib/typescript/module/ui/client.d.ts +0 -2
  550. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  551. package/lib/typescript/module/ui/components/ActingAsBanner.d.ts.map +1 -1
  552. package/lib/typescript/module/ui/components/Avatar.d.ts.map +1 -1
  553. package/lib/typescript/module/ui/components/BottomSheet.d.ts +27 -27
  554. package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +1 -1
  555. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
  556. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  557. package/lib/typescript/module/ui/components/Header.d.ts.map +1 -1
  558. package/lib/typescript/module/ui/components/Icon.d.ts +3 -2
  559. package/lib/typescript/module/ui/components/Icon.d.ts.map +1 -1
  560. package/lib/typescript/module/ui/components/IconButton/IconButton.d.ts.map +1 -1
  561. package/lib/typescript/module/ui/components/OxyPayButton.d.ts.map +1 -1
  562. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  563. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  564. package/lib/typescript/module/ui/components/ProfileCard.d.ts +4 -1
  565. package/lib/typescript/module/ui/components/ProfileCard.d.ts.map +1 -1
  566. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  567. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts.map +1 -1
  568. package/lib/typescript/module/ui/components/TextField/Addons/Outline.d.ts +2 -2
  569. package/lib/typescript/module/ui/components/TextField/helpers.d.ts +2 -2
  570. package/lib/typescript/module/ui/components/TextField/types.d.ts +0 -1
  571. package/lib/typescript/module/ui/components/TextField/types.d.ts.map +1 -1
  572. package/lib/typescript/module/ui/components/TextField.d.ts +1 -1
  573. package/lib/typescript/module/ui/components/TextField.d.ts.map +1 -1
  574. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts +0 -1
  575. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +1 -1
  576. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  577. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts +1 -1
  578. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  579. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts +0 -2
  580. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  581. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts +3 -2
  582. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  583. package/lib/typescript/module/ui/components/fileManagement/styles.d.ts +200 -17
  584. package/lib/typescript/module/ui/components/fileManagement/styles.d.ts.map +1 -1
  585. package/lib/typescript/module/ui/components/index.d.ts +0 -5
  586. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  587. package/lib/typescript/module/ui/components/logo/LogoIcon.d.ts +22 -0
  588. package/lib/typescript/module/ui/components/logo/LogoIcon.d.ts.map +1 -0
  589. package/lib/typescript/module/ui/components/logo/LogoText.d.ts +22 -0
  590. package/lib/typescript/module/ui/components/logo/LogoText.d.ts.map +1 -0
  591. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts +2 -2
  592. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  593. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  594. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  595. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  596. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  597. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  598. package/lib/typescript/module/ui/components/payment/paymentStyles.d.ts +0 -7
  599. package/lib/typescript/module/ui/components/payment/paymentStyles.d.ts.map +1 -1
  600. package/lib/typescript/module/ui/components/styles/overlay.d.ts +3 -1
  601. package/lib/typescript/module/ui/components/styles/overlay.d.ts.map +1 -1
  602. package/lib/typescript/module/ui/components/theming.d.ts.map +1 -1
  603. package/lib/typescript/module/ui/components/types.d.ts.map +1 -1
  604. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  605. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  606. package/lib/typescript/module/ui/hooks/index.d.ts +5 -3
  607. package/lib/typescript/module/ui/hooks/index.d.ts.map +1 -1
  608. package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts +11 -0
  609. package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
  610. package/lib/typescript/module/ui/hooks/mutations/mutationKeys.d.ts +25 -0
  611. package/lib/typescript/module/ui/hooks/mutations/mutationKeys.d.ts.map +1 -0
  612. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +161 -9
  613. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  614. package/lib/typescript/module/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -1
  615. package/lib/typescript/module/ui/hooks/queries/index.d.ts +1 -1
  616. package/lib/typescript/module/ui/hooks/queries/index.d.ts.map +1 -1
  617. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +1 -0
  618. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  619. package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts +22 -8
  620. package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  621. package/lib/typescript/module/ui/hooks/queries/useSecurityQueries.d.ts +13 -3
  622. package/lib/typescript/module/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
  623. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts +7 -5
  624. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  625. package/lib/typescript/module/ui/hooks/queryClient.d.ts +57 -9
  626. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  627. package/lib/typescript/module/ui/hooks/useAssets.d.ts +1 -1
  628. package/lib/typescript/module/ui/hooks/useAuth.d.ts +0 -1
  629. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  630. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts +10 -2
  631. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  632. package/lib/typescript/module/ui/hooks/useFileDownloadUrl.d.ts +2 -6
  633. package/lib/typescript/module/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
  634. package/lib/typescript/module/ui/hooks/useMutationStatus.d.ts +23 -0
  635. package/lib/typescript/module/ui/hooks/useMutationStatus.d.ts.map +1 -0
  636. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts +13 -0
  637. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts.map +1 -0
  638. package/lib/typescript/module/ui/hooks/useSessionSocket.d.ts +1 -2
  639. package/lib/typescript/module/ui/hooks/useSessionSocket.d.ts.map +1 -1
  640. package/lib/typescript/module/ui/index.d.ts +1 -4
  641. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  642. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +1 -1
  643. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  644. package/lib/typescript/module/ui/navigation/routes.d.ts +48 -2
  645. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  646. package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  647. package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  648. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  649. package/lib/typescript/module/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  650. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  651. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  652. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts +49 -0
  653. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -0
  654. package/lib/typescript/module/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  655. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  656. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  657. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  658. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  659. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  660. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  661. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  662. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  663. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  664. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  665. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  666. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  667. package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  668. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  669. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  670. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  671. package/lib/typescript/module/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  672. package/lib/typescript/module/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  673. package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  674. package/lib/typescript/module/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  675. package/lib/typescript/module/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  676. package/lib/typescript/module/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  677. package/lib/typescript/module/ui/server.d.ts +0 -2
  678. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  679. package/lib/typescript/module/ui/styles/authStyles.d.ts +0 -4
  680. package/lib/typescript/module/ui/styles/authStyles.d.ts.map +1 -1
  681. package/lib/typescript/module/ui/styles/index.d.ts +0 -1
  682. package/lib/typescript/module/ui/styles/index.d.ts.map +1 -1
  683. package/lib/typescript/module/ui/styles/spacing.d.ts +0 -36
  684. package/lib/typescript/module/ui/styles/spacing.d.ts.map +1 -1
  685. package/lib/typescript/module/ui/styles/theme.d.ts +0 -1
  686. package/lib/typescript/module/ui/styles/theme.d.ts.map +1 -1
  687. package/lib/typescript/module/ui/utils/fileManagement.d.ts +39 -12
  688. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  689. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +3 -1
  690. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
  691. package/lib/typescript/module/ui/utils/userUtils.d.ts +19 -18
  692. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
  693. package/lib/typescript/types/expo-vector-icons.d.ts +7 -4
  694. package/package.json +64 -31
  695. package/src/index.ts +11 -4
  696. package/src/types/expo-vector-icons.d.ts +7 -4
  697. package/src/ui/client.ts +0 -6
  698. package/src/ui/components/ActingAsBanner.tsx +0 -4
  699. package/src/ui/components/ActivityIndicator.tsx +1 -1
  700. package/src/ui/components/Avatar.tsx +0 -2
  701. package/src/ui/components/BottomSheet.tsx +41 -440
  702. package/src/ui/components/BottomSheetRouter.tsx +12 -1
  703. package/src/ui/components/FollowButton.tsx +2 -4
  704. package/src/ui/components/Header.tsx +0 -5
  705. package/src/ui/components/Icon.tsx +12 -6
  706. package/src/ui/components/IconButton/IconButton.tsx +0 -3
  707. package/src/ui/components/OxyPayButton.tsx +0 -2
  708. package/src/ui/components/OxyProvider.tsx +129 -49
  709. package/src/ui/components/OxySignInButton.tsx +21 -9
  710. package/src/ui/components/ProfileCard.tsx +13 -10
  711. package/src/ui/components/QuickActions.tsx +2 -2
  712. package/src/ui/components/SignInModal.tsx +38 -13
  713. package/src/ui/components/StepBasedScreen.tsx +0 -2
  714. package/src/ui/components/TextField/Addons/Outline.tsx +2 -2
  715. package/src/ui/components/TextField/helpers.tsx +2 -2
  716. package/src/ui/components/TextField/types.tsx +0 -1
  717. package/src/ui/components/TextField.tsx +1 -2
  718. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +1 -1
  719. package/src/ui/components/feedback/feedbackStyles.ts +0 -2
  720. package/src/ui/components/fileManagement/AnimatedButton.tsx +0 -1
  721. package/src/ui/components/fileManagement/FileDetailsModal.tsx +71 -65
  722. package/src/ui/components/fileManagement/FileViewer.tsx +31 -24
  723. package/src/ui/components/fileManagement/UploadPreview.tsx +21 -25
  724. package/src/ui/components/fileManagement/styles.ts +206 -18
  725. package/src/ui/components/index.ts +0 -5
  726. package/src/ui/components/logo/LogoIcon.tsx +70 -0
  727. package/src/ui/components/logo/LogoText.tsx +70 -0
  728. package/src/ui/components/modals/DeleteAccountModal.tsx +56 -91
  729. package/src/ui/components/payment/PaymentDetailsStep.tsx +17 -20
  730. package/src/ui/components/payment/PaymentMethodStep.tsx +33 -35
  731. package/src/ui/components/payment/PaymentReviewStep.tsx +63 -67
  732. package/src/ui/components/payment/PaymentSuccessStep.tsx +5 -13
  733. package/src/ui/components/payment/PaymentSummaryStep.tsx +26 -33
  734. package/src/ui/components/payment/paymentStyles.ts +0 -8
  735. package/src/ui/components/styles/overlay.tsx +17 -8
  736. package/src/ui/components/theming.tsx +0 -1
  737. package/src/ui/components/types.tsx +3 -2
  738. package/src/ui/context/OxyContext.tsx +34 -19
  739. package/src/ui/context/hooks/useAuthOperations.ts +1 -2
  740. package/src/ui/hooks/index.ts +11 -4
  741. package/src/ui/hooks/mutations/mutationFactory.ts +16 -1
  742. package/src/ui/hooks/mutations/mutationKeys.ts +28 -0
  743. package/src/ui/hooks/mutations/useAccountMutations.ts +251 -59
  744. package/src/ui/hooks/mutations/useServicesMutations.ts +10 -4
  745. package/src/ui/hooks/queries/index.ts +1 -0
  746. package/src/ui/hooks/queries/queryKeys.ts +2 -0
  747. package/src/ui/hooks/queries/useAccountQueries.ts +83 -3
  748. package/src/ui/hooks/queries/useSecurityQueries.ts +42 -2
  749. package/src/ui/hooks/queryClient.ts +194 -69
  750. package/src/ui/hooks/useAsyncAction.ts +3 -3
  751. package/src/ui/hooks/useAuth.ts +0 -2
  752. package/src/ui/hooks/useAvatarPicker.ts +108 -27
  753. package/src/ui/hooks/useFileDownloadUrl.ts +15 -39
  754. package/src/ui/hooks/useMutationStatus.ts +111 -0
  755. package/src/ui/hooks/useOnlineStatus.ts +29 -0
  756. package/src/ui/hooks/useSessionSocket.ts +136 -126
  757. package/src/ui/hooks/useSettingToggle.ts +1 -1
  758. package/src/ui/index.ts +0 -12
  759. package/src/ui/navigation/routes.ts +93 -2
  760. package/src/ui/screens/AccountCenterScreen.tsx +17 -16
  761. package/src/ui/screens/AccountOverviewScreen.tsx +98 -129
  762. package/src/ui/screens/AccountSettingsScreen.tsx +138 -165
  763. package/src/ui/screens/AccountSwitcherScreen.tsx +414 -402
  764. package/src/ui/screens/AccountVerificationScreen.tsx +25 -24
  765. package/src/ui/screens/AppInfoScreen.tsx +8 -13
  766. package/src/ui/screens/AvatarCropScreen.tsx +1073 -0
  767. package/src/ui/screens/CreateManagedAccountScreen.tsx +5 -16
  768. package/src/ui/screens/EditProfileFieldScreen.tsx +5 -10
  769. package/src/ui/screens/FAQScreen.tsx +3 -3
  770. package/src/ui/screens/FeedbackScreen.tsx +64 -50
  771. package/src/ui/screens/FileManagementScreen.tsx +911 -158
  772. package/src/ui/screens/HelpSupportScreen.tsx +2 -3
  773. package/src/ui/screens/HistoryViewScreen.tsx +51 -17
  774. package/src/ui/screens/LanguageSelectorScreen.tsx +20 -10
  775. package/src/ui/screens/LegalDocumentsScreen.tsx +47 -64
  776. package/src/ui/screens/PaymentGatewayScreen.tsx +13 -14
  777. package/src/ui/screens/PremiumSubscriptionScreen.tsx +51 -56
  778. package/src/ui/screens/PrivacySettingsScreen.tsx +97 -207
  779. package/src/ui/screens/ProfileScreen.tsx +1 -2
  780. package/src/ui/screens/SavesCollectionsScreen.tsx +25 -25
  781. package/src/ui/screens/SearchSettingsScreen.tsx +11 -19
  782. package/src/ui/screens/SessionManagementScreen.tsx +64 -50
  783. package/src/ui/screens/UserLinksScreen.tsx +15 -33
  784. package/src/ui/screens/UserListScreen.tsx +30 -19
  785. package/src/ui/screens/WelcomeNewUserScreen.tsx +60 -38
  786. package/src/ui/screens/karma/KarmaAboutScreen.tsx +0 -3
  787. package/src/ui/screens/karma/KarmaCenterScreen.tsx +4 -8
  788. package/src/ui/screens/karma/KarmaFAQScreen.tsx +5 -7
  789. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +3 -4
  790. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +13 -18
  791. package/src/ui/screens/karma/KarmaRulesScreen.tsx +3 -4
  792. package/src/ui/server.ts +0 -4
  793. package/src/ui/styles/authStyles.ts +0 -5
  794. package/src/ui/styles/index.ts +0 -1
  795. package/src/ui/styles/spacing.ts +0 -43
  796. package/src/ui/styles/theme.ts +0 -4
  797. package/src/ui/utils/fileManagement.ts +66 -38
  798. package/src/ui/utils/sessionHelpers.ts +3 -1
  799. package/src/ui/utils/userUtils.ts +45 -29
  800. package/lib/commonjs/lib/sonner-safe.js +0 -32
  801. package/lib/commonjs/lib/sonner-safe.js.map +0 -1
  802. package/lib/commonjs/lib/sonner.js +0 -19
  803. package/lib/commonjs/lib/sonner.js.map +0 -1
  804. package/lib/commonjs/lib/sonner.native.js +0 -24
  805. package/lib/commonjs/lib/sonner.native.js.map +0 -1
  806. package/lib/commonjs/lib/sonner.web.js +0 -24
  807. package/lib/commonjs/lib/sonner.web.js.map +0 -1
  808. package/lib/commonjs/ui/components/GroupedItem.js +0 -138
  809. package/lib/commonjs/ui/components/GroupedItem.js.map +0 -1
  810. package/lib/commonjs/ui/components/GroupedSection.js +0 -41
  811. package/lib/commonjs/ui/components/GroupedSection.js.map +0 -1
  812. package/lib/commonjs/ui/components/Section.js +0 -39
  813. package/lib/commonjs/ui/components/Section.js.map +0 -1
  814. package/lib/commonjs/ui/components/SectionTitle.js +0 -29
  815. package/lib/commonjs/ui/components/SectionTitle.js.map +0 -1
  816. package/lib/commonjs/ui/components/SettingRow.js +0 -96
  817. package/lib/commonjs/ui/components/SettingRow.js.map +0 -1
  818. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +0 -208
  819. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +0 -1
  820. package/lib/commonjs/ui/hooks/useThemeColors.js +0 -33
  821. package/lib/commonjs/ui/hooks/useThemeColors.js.map +0 -1
  822. package/lib/commonjs/ui/hooks/useThemeStyles.js +0 -38
  823. package/lib/commonjs/ui/hooks/useThemeStyles.js.map +0 -1
  824. package/lib/commonjs/ui/styles/fonts.js +0 -84
  825. package/lib/commonjs/ui/styles/fonts.js.map +0 -1
  826. package/lib/module/lib/sonner-safe.js +0 -29
  827. package/lib/module/lib/sonner-safe.js.map +0 -1
  828. package/lib/module/lib/sonner.js +0 -14
  829. package/lib/module/lib/sonner.js.map +0 -1
  830. package/lib/module/lib/sonner.native.js +0 -19
  831. package/lib/module/lib/sonner.native.js.map +0 -1
  832. package/lib/module/lib/sonner.web.js +0 -19
  833. package/lib/module/lib/sonner.web.js.map +0 -1
  834. package/lib/module/ui/components/GroupedItem.js +0 -135
  835. package/lib/module/ui/components/GroupedItem.js.map +0 -1
  836. package/lib/module/ui/components/GroupedSection.js +0 -37
  837. package/lib/module/ui/components/GroupedSection.js.map +0 -1
  838. package/lib/module/ui/components/Section.js +0 -34
  839. package/lib/module/ui/components/Section.js.map +0 -1
  840. package/lib/module/ui/components/SectionTitle.js +0 -25
  841. package/lib/module/ui/components/SectionTitle.js.map +0 -1
  842. package/lib/module/ui/components/SettingRow.js +0 -91
  843. package/lib/module/ui/components/SettingRow.js.map +0 -1
  844. package/lib/module/ui/components/internal/GroupedPillButtons.js +0 -204
  845. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +0 -1
  846. package/lib/module/ui/hooks/useThemeColors.js +0 -29
  847. package/lib/module/ui/hooks/useThemeColors.js.map +0 -1
  848. package/lib/module/ui/hooks/useThemeStyles.js +0 -33
  849. package/lib/module/ui/hooks/useThemeStyles.js.map +0 -1
  850. package/lib/module/ui/styles/fonts.js +0 -81
  851. package/lib/module/ui/styles/fonts.js.map +0 -1
  852. package/lib/typescript/commonjs/lib/sonner-safe.d.ts +0 -9
  853. package/lib/typescript/commonjs/lib/sonner-safe.d.ts.map +0 -1
  854. package/lib/typescript/commonjs/lib/sonner.d.ts +0 -12
  855. package/lib/typescript/commonjs/lib/sonner.d.ts.map +0 -1
  856. package/lib/typescript/commonjs/lib/sonner.native.d.ts +0 -15
  857. package/lib/typescript/commonjs/lib/sonner.native.d.ts.map +0 -1
  858. package/lib/typescript/commonjs/lib/sonner.web.d.ts +0 -15
  859. package/lib/typescript/commonjs/lib/sonner.web.d.ts.map +0 -1
  860. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts +0 -24
  861. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts.map +0 -1
  862. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts +0 -30
  863. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts.map +0 -1
  864. package/lib/typescript/commonjs/ui/components/Section.d.ts +0 -12
  865. package/lib/typescript/commonjs/ui/components/Section.d.ts.map +0 -1
  866. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts +0 -10
  867. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts.map +0 -1
  868. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts +0 -20
  869. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts.map +0 -1
  870. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  871. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  872. package/lib/typescript/commonjs/ui/hooks/useThemeColors.d.ts +0 -87
  873. package/lib/typescript/commonjs/ui/hooks/useThemeColors.d.ts.map +0 -1
  874. package/lib/typescript/commonjs/ui/hooks/useThemeStyles.d.ts +0 -22
  875. package/lib/typescript/commonjs/ui/hooks/useThemeStyles.d.ts.map +0 -1
  876. package/lib/typescript/commonjs/ui/styles/fonts.d.ts +0 -21
  877. package/lib/typescript/commonjs/ui/styles/fonts.d.ts.map +0 -1
  878. package/lib/typescript/module/lib/sonner-safe.d.ts +0 -9
  879. package/lib/typescript/module/lib/sonner-safe.d.ts.map +0 -1
  880. package/lib/typescript/module/lib/sonner.d.ts +0 -12
  881. package/lib/typescript/module/lib/sonner.d.ts.map +0 -1
  882. package/lib/typescript/module/lib/sonner.native.d.ts +0 -15
  883. package/lib/typescript/module/lib/sonner.native.d.ts.map +0 -1
  884. package/lib/typescript/module/lib/sonner.web.d.ts +0 -15
  885. package/lib/typescript/module/lib/sonner.web.d.ts.map +0 -1
  886. package/lib/typescript/module/ui/components/GroupedItem.d.ts +0 -24
  887. package/lib/typescript/module/ui/components/GroupedItem.d.ts.map +0 -1
  888. package/lib/typescript/module/ui/components/GroupedSection.d.ts +0 -30
  889. package/lib/typescript/module/ui/components/GroupedSection.d.ts.map +0 -1
  890. package/lib/typescript/module/ui/components/Section.d.ts +0 -12
  891. package/lib/typescript/module/ui/components/Section.d.ts.map +0 -1
  892. package/lib/typescript/module/ui/components/SectionTitle.d.ts +0 -10
  893. package/lib/typescript/module/ui/components/SectionTitle.d.ts.map +0 -1
  894. package/lib/typescript/module/ui/components/SettingRow.d.ts +0 -20
  895. package/lib/typescript/module/ui/components/SettingRow.d.ts.map +0 -1
  896. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  897. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  898. package/lib/typescript/module/ui/hooks/useThemeColors.d.ts +0 -87
  899. package/lib/typescript/module/ui/hooks/useThemeColors.d.ts.map +0 -1
  900. package/lib/typescript/module/ui/hooks/useThemeStyles.d.ts +0 -22
  901. package/lib/typescript/module/ui/hooks/useThemeStyles.d.ts.map +0 -1
  902. package/lib/typescript/module/ui/styles/fonts.d.ts +0 -21
  903. package/lib/typescript/module/ui/styles/fonts.d.ts.map +0 -1
  904. package/src/lib/sonner-safe.ts +0 -31
  905. package/src/lib/sonner.native.ts +0 -28
  906. package/src/lib/sonner.ts +0 -11
  907. package/src/lib/sonner.web.ts +0 -28
  908. package/src/ui/components/GroupedItem.tsx +0 -161
  909. package/src/ui/components/GroupedSection.tsx +0 -60
  910. package/src/ui/components/Section.tsx +0 -42
  911. package/src/ui/components/SectionTitle.tsx +0 -27
  912. package/src/ui/components/SettingRow.tsx +0 -105
  913. package/src/ui/components/internal/GroupedPillButtons.tsx +0 -253
  914. package/src/ui/hooks/useThemeColors.ts +0 -27
  915. package/src/ui/hooks/useThemeStyles.ts +0 -50
  916. package/src/ui/styles/fonts.ts +0 -77
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useState, useEffect, useCallback, useMemo, useRef } from 'react';
4
- import { View, Text, TouchableOpacity, StyleSheet, ScrollView, ActivityIndicator, RefreshControl, TextInput, Image, Animated, Easing } from 'react-native';
4
+ import { View, Text, TouchableOpacity, StyleSheet, ScrollView, ActivityIndicator, RefreshControl, TextInput, Image, Animated, Easing, FlatList, AccessibilityInfo, Platform, useWindowDimensions } from 'react-native';
5
5
  import { Image as ExpoImage } from 'expo-image';
6
+ import Reanimated, { FadeIn, useAnimatedStyle, useSharedValue, withSequence, withSpring, withTiming } from 'react-native-reanimated';
6
7
  // Lazy load expo-document-picker (optional dependency)
7
8
  // This allows the screen to work even if expo-document-picker is not installed
8
9
  let DocumentPicker = null;
@@ -15,16 +16,13 @@ const loadDocumentPicker = async () => {
15
16
  throw new Error('expo-document-picker is not installed. Please install it: npx expo install expo-document-picker');
16
17
  }
17
18
  };
18
- import { toast } from '../../lib/sonner';
19
- import * as Prompt from '@oxyhq/bloom/prompt';
20
- import { usePromptControl } from '@oxyhq/bloom/prompt';
21
- import { Ionicons } from '@expo/vector-icons';
22
- // @ts-ignore - MaterialCommunityIcons is available at runtime
23
- import { MaterialCommunityIcons } from '@expo/vector-icons';
19
+ import { Dialog, toast, useDialogControl } from '@oxyhq/bloom';
20
+ import { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';
21
+ import { getErrorMessage as getOxyErrorMessage } from '@oxyhq/core';
24
22
  import { useFileStore, useFiles, useUploading as useUploadingStore, useUploadAggregateProgress, useDeleting as useDeletingStore } from "../stores/fileStore.js";
25
23
  import Header from "../components/Header.js";
26
24
  import JustifiedPhotoGrid from "../components/photogrid/JustifiedPhotoGrid.js";
27
- import { GroupedSection } from "../components/index.js";
25
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
28
26
  import { useTheme } from '@oxyhq/bloom/theme';
29
27
  import { useOxy } from "../context/OxyContext.js";
30
28
  import { useI18n } from "../hooks/useI18n.js";
@@ -33,11 +31,98 @@ import { convertDocumentPickerAssetToFile, formatFileSize, getFileIcon, getSafeD
33
31
  import { FileViewer } from "../components/fileManagement/FileViewer.js";
34
32
  import { FileDetailsModal } from "../components/fileManagement/FileDetailsModal.js";
35
33
  import { UploadPreview } from "../components/fileManagement/UploadPreview.js";
36
- import { useDialogControl } from '@oxyhq/bloom/dialog';
37
- import { fileManagementStyles } from "../components/fileManagement/styles.js";
38
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
39
- /** Extract error message from unknown error type */
40
- const getErrorMessage = error => error instanceof Error ? getErrorMessage(error) : typeof error === 'string' ? error : undefined;
34
+ import { fileManagementStyles, photoPickerStyles } from "../components/fileManagement/styles.js";
35
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
36
+ /**
37
+ * Extract error message from unknown error type.
38
+ * Delegates to the canonical `getErrorMessage` in `@oxyhq/core` and returns
39
+ * `undefined` for empty results (so callers can fall back to a translated
40
+ * message via `||`).
41
+ */
42
+ const getErrorMessage = error => {
43
+ if (error == null) return undefined;
44
+ const message = getOxyErrorMessage(error, '');
45
+ return message ? message : undefined;
46
+ };
47
+
48
+ /**
49
+ * A picker-produced file ready to upload. On web this is a real `File`
50
+ * (carrying an optional `uri` for preview). On native, it's an
51
+ * {@link RNFileDescriptor} — passed straight to FormData by `assetUpload`.
52
+ */
53
+
54
+ /** Returns the display name for either a web File or an RN descriptor. */
55
+ const candidateName = (candidate, fallback) => candidate.name && typeof candidate.name === 'string' ? candidate.name : fallback;
56
+
57
+ /** Returns the byte size for either a web File or an RN descriptor (0 if unknown). */
58
+ const candidateSize = candidate => {
59
+ const size = candidate.size;
60
+ return typeof size === 'number' && Number.isFinite(size) ? size : 0;
61
+ };
62
+
63
+ /** Returns the mime type for either a web File or an RN descriptor. */
64
+ const candidateType = candidate => {
65
+ const value = candidate.type;
66
+ return typeof value === 'string' && value.length > 0 ? value : 'application/octet-stream';
67
+ };
68
+
69
+ /** Returns the preview URI for an upload candidate, if available. */
70
+ const candidateUri = candidate => {
71
+ const uri = candidate.uri;
72
+ return typeof uri === 'string' && uri.length > 0 ? uri : undefined;
73
+ };
74
+
75
+ /**
76
+ * Haptic feedback wrapper. `expo-haptics` is an optional dependency — when not
77
+ * installed (or on web), all calls degrade silently. We resolve the module
78
+ * once and cache the promise so subsequent calls don't repeat the dynamic
79
+ * import. Matches the pattern used by AvatarCropScreen.
80
+ */
81
+
82
+ let hapticsModulePromise = null;
83
+ const getHaptics = () => {
84
+ if (Platform.OS === 'web') return Promise.resolve(null);
85
+ if (hapticsModulePromise) return hapticsModulePromise;
86
+ hapticsModulePromise = (async () => {
87
+ try {
88
+ const mod = await import('expo-haptics');
89
+ if (!mod || typeof mod.impactAsync !== 'function') return null;
90
+ return mod;
91
+ } catch {
92
+ return null;
93
+ }
94
+ })();
95
+ return hapticsModulePromise;
96
+ };
97
+ const hapticImpact = async style => {
98
+ const h = await getHaptics();
99
+ if (!h) return;
100
+ const styleEnum = style === 'heavy' ? h.ImpactFeedbackStyle.Heavy : style === 'medium' ? h.ImpactFeedbackStyle.Medium : h.ImpactFeedbackStyle.Light;
101
+ try {
102
+ await h.impactAsync(styleEnum);
103
+ } catch {
104
+ // Silent — haptics are non-critical UX polish.
105
+ }
106
+ };
107
+ const hapticSelection = async () => {
108
+ const h = await getHaptics();
109
+ if (!h) return;
110
+ try {
111
+ await h.selectionAsync();
112
+ } catch {
113
+ // Silent.
114
+ }
115
+ };
116
+ const hapticNotification = async type => {
117
+ const h = await getHaptics();
118
+ if (!h) return;
119
+ const typeEnum = type === 'error' ? h.NotificationFeedbackType.Error : type === 'warning' ? h.NotificationFeedbackType.Warning : h.NotificationFeedbackType.Success;
120
+ try {
121
+ await h.notificationAsync(typeEnum);
122
+ } catch {
123
+ // Silent.
124
+ }
125
+ };
41
126
 
42
127
  // Animated button component for smooth transitions
43
128
  const AnimatedButton = ({
@@ -46,7 +131,8 @@ const AnimatedButton = ({
46
131
  icon,
47
132
  primaryColor,
48
133
  textColor,
49
- style
134
+ style,
135
+ accessibilityLabel
50
136
  }) => {
51
137
  const animatedValue = useRef(new Animated.Value(isSelected ? 1 : 0)).current;
52
138
  useEffect(() => {
@@ -61,13 +147,14 @@ const AnimatedButton = ({
61
147
  inputRange: [0, 1],
62
148
  outputRange: ['transparent', primaryColor]
63
149
  });
64
- const iconColor = animatedValue.interpolate({
65
- inputRange: [0, 1],
66
- outputRange: [textColor, '#FFFFFF']
67
- });
68
150
  return /*#__PURE__*/_jsx(TouchableOpacity, {
69
151
  onPress: onPress,
70
152
  activeOpacity: 0.7,
153
+ accessibilityRole: "button",
154
+ accessibilityLabel: accessibilityLabel,
155
+ accessibilityState: {
156
+ selected: isSelected
157
+ },
71
158
  children: /*#__PURE__*/_jsx(Animated.View, {
72
159
  style: [style, {
73
160
  backgroundColor
@@ -82,6 +169,453 @@ const AnimatedButton = ({
82
169
  })
83
170
  });
84
171
  };
172
+
173
+ /**
174
+ * Props for the dedicated photo picker view. Used by FileManagementScreen
175
+ * only when `selectMode + image-only` is active. All callbacks are wired by
176
+ * the parent — this component is purely presentational.
177
+ */
178
+
179
+ /**
180
+ * A single photo cell. Memoized so re-renders during selection only touch
181
+ * affected cells — selection of one photo must not redraw the whole grid.
182
+ *
183
+ * Apple Photos pattern: when any cell is selected, *non-selected* siblings
184
+ * fade to 0.6 opacity to focus attention on the active selection.
185
+ */
186
+ const PhotoPickerCell = /*#__PURE__*/React.memo(function PhotoPickerCell(props) {
187
+ const {
188
+ photo,
189
+ size,
190
+ marginRight,
191
+ marginBottom,
192
+ isSelected,
193
+ selectionIndex,
194
+ dim,
195
+ primaryColor,
196
+ thumbUrl,
197
+ enterIndex,
198
+ reduceMotion,
199
+ onPress,
200
+ onLongPress,
201
+ a11yLabel
202
+ } = props;
203
+
204
+ // Cap the cumulative stagger at ~800ms total so the very long grid does
205
+ // not keep fading in late tiles. Beyond ~53 tiles the delay maxes out.
206
+ const STAGGER_PER_CELL_MS = 15;
207
+ const MAX_TOTAL_STAGGER_MS = 800;
208
+ const delay = Math.min(enterIndex * STAGGER_PER_CELL_MS, MAX_TOTAL_STAGGER_MS);
209
+
210
+ // Selection ring pulse animation: 1.0 → 1.05 → 1.0 on transition to
211
+ // selected. Plays at most once per selection change; reduce-motion skips.
212
+ const ringScale = useSharedValue(1);
213
+ const prevSelected = useRef(isSelected);
214
+ useEffect(() => {
215
+ if (prevSelected.current === isSelected) return;
216
+ prevSelected.current = isSelected;
217
+ if (!isSelected) {
218
+ ringScale.value = 1;
219
+ return;
220
+ }
221
+ if (reduceMotion) {
222
+ ringScale.value = 1;
223
+ return;
224
+ }
225
+ ringScale.value = withSequence(withTiming(1.05, {
226
+ duration: 110
227
+ }), withSpring(1, {
228
+ damping: 14,
229
+ stiffness: 200
230
+ }));
231
+ }, [isSelected, reduceMotion, ringScale]);
232
+ const ringAnimatedStyle = useAnimatedStyle(() => ({
233
+ transform: [{
234
+ scale: ringScale.value
235
+ }]
236
+ }));
237
+ const inner = /*#__PURE__*/_jsxs(_Fragment, {
238
+ children: [/*#__PURE__*/_jsx(View, {
239
+ style: [photoPickerStyles.cellInner, dim && photoPickerStyles.cellDim],
240
+ children: /*#__PURE__*/_jsx(ExpoImage, {
241
+ source: {
242
+ uri: thumbUrl
243
+ },
244
+ style: photoPickerStyles.cellImage,
245
+ contentFit: "cover",
246
+ transition: 120,
247
+ cachePolicy: "memory-disk",
248
+ accessibilityLabel: photo.filename
249
+ })
250
+ }), isSelected && /*#__PURE__*/_jsx(Reanimated.View, {
251
+ pointerEvents: "none",
252
+ style: [photoPickerStyles.cellRing, {
253
+ borderColor: primaryColor
254
+ }, ringAnimatedStyle]
255
+ }), isSelected && /*#__PURE__*/_jsx(View, {
256
+ pointerEvents: "none",
257
+ style: [photoPickerStyles.cellBadge, {
258
+ backgroundColor: primaryColor
259
+ }],
260
+ children: /*#__PURE__*/_jsx(Text, {
261
+ style: photoPickerStyles.cellBadgeText,
262
+ children: selectionIndex > 0 ? String(selectionIndex) : ''
263
+ })
264
+ })]
265
+ });
266
+ const cellWrapperStyle = {
267
+ width: size,
268
+ height: size,
269
+ marginRight,
270
+ marginBottom
271
+ };
272
+ if (reduceMotion) {
273
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
274
+ activeOpacity: 0.85,
275
+ onPress: onPress,
276
+ onLongPress: onLongPress,
277
+ style: [photoPickerStyles.cellWrapper, cellWrapperStyle],
278
+ accessibilityRole: "button",
279
+ accessibilityLabel: a11yLabel,
280
+ accessibilityState: {
281
+ selected: isSelected
282
+ },
283
+ children: inner
284
+ });
285
+ }
286
+ return /*#__PURE__*/_jsx(Reanimated.View, {
287
+ entering: FadeIn.delay(delay).duration(200),
288
+ style: [photoPickerStyles.cellWrapper, cellWrapperStyle],
289
+ children: /*#__PURE__*/_jsx(TouchableOpacity, {
290
+ activeOpacity: 0.85,
291
+ onPress: onPress,
292
+ onLongPress: onLongPress,
293
+ style: {
294
+ flex: 1
295
+ },
296
+ accessibilityRole: "button",
297
+ accessibilityLabel: a11yLabel,
298
+ accessibilityState: {
299
+ selected: isSelected
300
+ },
301
+ children: inner
302
+ })
303
+ });
304
+ });
305
+ const PhotoPickerView = ({
306
+ photos,
307
+ selectedIds,
308
+ multiSelect,
309
+ maxSelection,
310
+ allowUpload,
311
+ refreshing,
312
+ uploading,
313
+ isPickingDocument,
314
+ uploadProgress,
315
+ hasMore,
316
+ loadingMore,
317
+ reduceMotion,
318
+ getThumbUrl,
319
+ primaryColor,
320
+ isOwner,
321
+ onTogglePhoto,
322
+ onPreviewPhoto,
323
+ onUpload,
324
+ onRefresh,
325
+ onLoadMore,
326
+ onCancel,
327
+ onConfirm,
328
+ t
329
+ }) => {
330
+ const {
331
+ width: windowWidth,
332
+ height: windowHeight
333
+ } = useWindowDimensions();
334
+
335
+ // Layout: 3 columns phone portrait, 2 columns phone landscape,
336
+ // 4 columns tablet (>= 600 width). Apple Photos-ish.
337
+ const columns = useMemo(() => {
338
+ if (windowWidth >= 600) return 4;
339
+ // Landscape phone: width > height
340
+ if (windowWidth > windowHeight) return 2;
341
+ return 3;
342
+ }, [windowWidth, windowHeight]);
343
+ const GUTTER = 2;
344
+ const cellSize = useMemo(() => {
345
+ // (windowWidth - (columns - 1) * GUTTER) / columns, but
346
+ // FlatList in 3-col layout means each row has 2 inter-cell gutters.
347
+ return Math.floor((windowWidth - GUTTER * (columns - 1)) / columns);
348
+ }, [windowWidth, columns]);
349
+
350
+ // Map selectedIds → 1-based selection order for the badge. We freeze a
351
+ // stable order at the time of selection: the order is the insertion
352
+ // order of the Set (which JS preserves natively).
353
+ const selectionOrder = useMemo(() => {
354
+ const map = new Map();
355
+ let i = 1;
356
+ for (const id of selectedIds) {
357
+ map.set(id, i++);
358
+ }
359
+ return map;
360
+ }, [selectedIds]);
361
+ const hasAnySelection = selectedIds.size > 0;
362
+
363
+ // Compact icon-only upload pill on narrow screens; full pill otherwise.
364
+ const showUploadLabel = windowWidth >= 360;
365
+
366
+ // The bottom sheet renders below the status bar already (its `maxHeight`
367
+ // is capped by `SCREEN_HEIGHT - insets.top`), so the picker MUST NOT add
368
+ // an additional safe-area inset to the header. Header layout:
369
+ // • 28dp drag-handle hit area floats at the very top of the sheet
370
+ // • 56dp app bar sits immediately below the handle
371
+ // Total header zone = 28 + 56 = 84dp from sheet top.
372
+ const HANDLE_ZONE = 28;
373
+ const APP_BAR_HEIGHT = 56;
374
+ const headerHeight = HANDLE_ZONE + APP_BAR_HEIGHT;
375
+ const contentPaddingTop = headerHeight + 4;
376
+ const isEmpty = photos.length === 0;
377
+ const a11yColumnsAnnouncement = useRef(columns);
378
+ useEffect(() => {
379
+ if (a11yColumnsAnnouncement.current !== columns) {
380
+ a11yColumnsAnnouncement.current = columns;
381
+ }
382
+ }, [columns]);
383
+ const handleCellPress = useCallback(photo => {
384
+ if (Platform.OS !== 'web') {
385
+ void hapticImpact('light');
386
+ }
387
+ onTogglePhoto(photo);
388
+ }, [onTogglePhoto]);
389
+ const handleCellLongPress = useCallback(photo => {
390
+ if (Platform.OS !== 'web') {
391
+ void hapticSelection();
392
+ }
393
+ onPreviewPhoto(photo);
394
+ }, [onPreviewPhoto]);
395
+ const handleConfirm = useCallback(() => {
396
+ if (multiSelect) {
397
+ if (selectedIds.size === 0) return;
398
+ if (Platform.OS !== 'web') {
399
+ void hapticNotification('success');
400
+ }
401
+ }
402
+ onConfirm();
403
+ }, [multiSelect, selectedIds.size, onConfirm]);
404
+
405
+ // FlatList renderItem: each cell knows its enterIndex (for stagger).
406
+ const renderItem = useCallback(({
407
+ item,
408
+ index
409
+ }) => {
410
+ const isSelected = selectedIds.has(item.id);
411
+ const selIndex = isSelected ? selectionOrder.get(item.id) || 0 : 0;
412
+ // Last column gets no right margin; last row no bottom margin
413
+ // (FlatList handles row breaks via numColumns).
414
+ const isLastInRow = (index + 1) % columns === 0;
415
+ const a11yLabel = t(isSelected ? 'fileManagement.a11y.photoCellSelected' : 'fileManagement.a11y.photoCellUnselected', {
416
+ name: item.filename || 'photo'
417
+ });
418
+ return /*#__PURE__*/_jsx(PhotoPickerCell, {
419
+ photo: item,
420
+ size: cellSize,
421
+ marginRight: isLastInRow ? 0 : GUTTER,
422
+ marginBottom: GUTTER,
423
+ isSelected: isSelected,
424
+ selectionIndex: selIndex,
425
+ dim: multiSelect && hasAnySelection && !isSelected,
426
+ primaryColor: primaryColor,
427
+ thumbUrl: getThumbUrl(item, 'thumb'),
428
+ enterIndex: index,
429
+ reduceMotion: reduceMotion,
430
+ onPress: () => handleCellPress(item),
431
+ onLongPress: () => handleCellLongPress(item),
432
+ a11yLabel: a11yLabel
433
+ });
434
+ }, [selectedIds, selectionOrder, columns, cellSize, multiSelect, hasAnySelection, primaryColor, getThumbUrl, reduceMotion, handleCellPress, handleCellLongPress, t]);
435
+ const keyExtractor = useCallback(item => item.id, []);
436
+ const listFooter = useMemo(() => {
437
+ if (!loadingMore) return null;
438
+ return /*#__PURE__*/_jsx(View, {
439
+ style: {
440
+ paddingVertical: 16,
441
+ alignItems: 'center'
442
+ },
443
+ children: /*#__PURE__*/_jsx(ActivityIndicator, {
444
+ size: "small",
445
+ color: "#FFFFFF"
446
+ })
447
+ });
448
+ }, [loadingMore]);
449
+ const handleEndReached = useCallback(() => {
450
+ if (loadingMore || !hasMore) return;
451
+ onLoadMore();
452
+ }, [loadingMore, hasMore, onLoadMore]);
453
+ const confirmDisabled = multiSelect && selectedIds.size === 0;
454
+ const confirmLabel = multiSelect ? t('fileManagement.doneWithCount', {
455
+ count: selectedIds.size
456
+ }) : t('fileManagement.done');
457
+
458
+ // The progress fill width. Guard against zero division.
459
+ const progressFraction = uploadProgress && uploadProgress.total > 0 ? Math.min(1, Math.max(0, uploadProgress.current / uploadProgress.total)) : 0;
460
+ return /*#__PURE__*/_jsxs(View, {
461
+ style: photoPickerStyles.root,
462
+ children: [isEmpty ? /*#__PURE__*/_jsxs(View, {
463
+ style: [photoPickerStyles.empty, {
464
+ paddingTop: contentPaddingTop
465
+ }],
466
+ children: [/*#__PURE__*/_jsx(View, {
467
+ style: photoPickerStyles.emptyIconWrap,
468
+ children: /*#__PURE__*/_jsx(MaterialCommunityIcons, {
469
+ name: "image-outline",
470
+ size: 64,
471
+ color: "#FFFFFF"
472
+ })
473
+ }), /*#__PURE__*/_jsx(Text, {
474
+ style: [photoPickerStyles.emptyTitle, {
475
+ color: '#FFFFFF'
476
+ }],
477
+ children: t('fileManagement.photoPicker.emptyTitle')
478
+ }), /*#__PURE__*/_jsx(Text, {
479
+ style: [photoPickerStyles.emptySubtitle, {
480
+ color: '#FFFFFF'
481
+ }],
482
+ children: t('fileManagement.photoPicker.emptySubtitle')
483
+ }), isOwner && allowUpload && /*#__PURE__*/_jsx(TouchableOpacity, {
484
+ style: [photoPickerStyles.emptyCta, {
485
+ backgroundColor: primaryColor
486
+ }],
487
+ onPress: onUpload,
488
+ disabled: uploading || isPickingDocument,
489
+ accessibilityRole: "button",
490
+ accessibilityLabel: t('fileManagement.uploadPhoto'),
491
+ accessibilityState: {
492
+ busy: uploading || isPickingDocument
493
+ },
494
+ children: uploading || isPickingDocument ? /*#__PURE__*/_jsx(ActivityIndicator, {
495
+ size: "small",
496
+ color: "#FFFFFF"
497
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
498
+ children: [/*#__PURE__*/_jsx(Ionicons, {
499
+ name: "cloud-upload",
500
+ size: 18,
501
+ color: "#FFFFFF"
502
+ }), /*#__PURE__*/_jsx(Text, {
503
+ style: photoPickerStyles.emptyCtaText,
504
+ children: t('fileManagement.uploadPhoto')
505
+ })]
506
+ })
507
+ })]
508
+ }) : /*#__PURE__*/_jsx(FlatList, {
509
+ data: photos,
510
+ renderItem: renderItem,
511
+ keyExtractor: keyExtractor,
512
+ numColumns: columns,
513
+ contentContainerStyle: [photoPickerStyles.gridContent, {
514
+ paddingTop: contentPaddingTop
515
+ }],
516
+ style: photoPickerStyles.grid,
517
+ showsVerticalScrollIndicator: false,
518
+ refreshControl: /*#__PURE__*/_jsx(RefreshControl, {
519
+ refreshing: refreshing,
520
+ onRefresh: onRefresh,
521
+ tintColor: "#FFFFFF",
522
+ colors: [primaryColor],
523
+ progressViewOffset: contentPaddingTop
524
+ }),
525
+ onEndReached: handleEndReached,
526
+ onEndReachedThreshold: 0.4,
527
+ ListFooterComponent: listFooter,
528
+ removeClippedSubviews: true,
529
+ initialNumToRender: Math.max(12, columns * 6),
530
+ windowSize: 9
531
+ }, `cols-${columns}`), /*#__PURE__*/_jsxs(View, {
532
+ style: [photoPickerStyles.header, {
533
+ paddingTop: HANDLE_ZONE,
534
+ minHeight: headerHeight
535
+ }],
536
+ children: [/*#__PURE__*/_jsxs(View, {
537
+ style: photoPickerStyles.headerRow,
538
+ children: [/*#__PURE__*/_jsx(View, {
539
+ style: [photoPickerStyles.headerSide, photoPickerStyles.headerSideLeft],
540
+ children: /*#__PURE__*/_jsx(TouchableOpacity, {
541
+ onPress: onCancel,
542
+ style: photoPickerStyles.headerCancel,
543
+ accessibilityRole: "button",
544
+ accessibilityLabel: t('fileManagement.a11y.cancelPicker'),
545
+ hitSlop: {
546
+ top: 8,
547
+ bottom: 8,
548
+ left: 8,
549
+ right: 8
550
+ },
551
+ children: /*#__PURE__*/_jsx(Text, {
552
+ style: photoPickerStyles.headerCancelText,
553
+ children: t('fileManagement.cancel')
554
+ })
555
+ })
556
+ }), /*#__PURE__*/_jsx(View, {
557
+ pointerEvents: "none",
558
+ children: /*#__PURE__*/_jsx(Text, {
559
+ style: photoPickerStyles.headerTitle,
560
+ numberOfLines: 1,
561
+ children: t('fileManagement.choosePhoto')
562
+ })
563
+ }), /*#__PURE__*/_jsx(View, {
564
+ style: [photoPickerStyles.headerSide, photoPickerStyles.headerSideRight],
565
+ children: multiSelect ? /*#__PURE__*/_jsx(TouchableOpacity, {
566
+ onPress: handleConfirm,
567
+ disabled: confirmDisabled,
568
+ style: [photoPickerStyles.headerPrimaryPill, {
569
+ backgroundColor: confirmDisabled ? 'rgba(255,255,255,0.18)' : primaryColor,
570
+ opacity: confirmDisabled ? 0.6 : 1
571
+ }],
572
+ accessibilityRole: "button",
573
+ accessibilityLabel: t('fileManagement.a11y.confirmSelection'),
574
+ accessibilityState: {
575
+ disabled: confirmDisabled
576
+ },
577
+ children: /*#__PURE__*/_jsx(Text, {
578
+ style: photoPickerStyles.headerPrimaryText,
579
+ children: confirmLabel
580
+ })
581
+ }) : isOwner && allowUpload && /*#__PURE__*/_jsx(TouchableOpacity, {
582
+ onPress: onUpload,
583
+ disabled: uploading || isPickingDocument,
584
+ style: [photoPickerStyles.headerPrimaryPill, !showUploadLabel && photoPickerStyles.headerPrimaryPillIconOnly, {
585
+ backgroundColor: primaryColor
586
+ }],
587
+ accessibilityRole: "button",
588
+ accessibilityLabel: t('fileManagement.a11y.uploadFromDevice'),
589
+ accessibilityState: {
590
+ busy: uploading || isPickingDocument
591
+ },
592
+ children: uploading || isPickingDocument ? /*#__PURE__*/_jsx(ActivityIndicator, {
593
+ size: "small",
594
+ color: "#FFFFFF"
595
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
596
+ children: [/*#__PURE__*/_jsx(Ionicons, {
597
+ name: "cloud-upload",
598
+ size: 16,
599
+ color: "#FFFFFF"
600
+ }), showUploadLabel && /*#__PURE__*/_jsx(Text, {
601
+ style: photoPickerStyles.headerPrimaryText,
602
+ children: t('fileManagement.upload')
603
+ })]
604
+ })
605
+ })
606
+ })]
607
+ }), uploading && /*#__PURE__*/_jsx(View, {
608
+ style: photoPickerStyles.headerProgressBarTrack,
609
+ children: /*#__PURE__*/_jsx(View, {
610
+ style: [photoPickerStyles.headerProgressBarFill, {
611
+ width: `${Math.round(progressFraction * 100)}%`,
612
+ backgroundColor: primaryColor
613
+ }]
614
+ })
615
+ })]
616
+ })]
617
+ });
618
+ };
85
619
  const FileManagementScreen = ({
86
620
  onClose,
87
621
  theme,
@@ -112,9 +646,9 @@ const FileManagementScreen = ({
112
646
  } = useI18n();
113
647
  const uploadFileMutation = useUploadFile();
114
648
  // Prompt controls
115
- const fileDeletePrompt = usePromptControl();
116
- const bulkDeletePrompt = usePromptControl();
117
- const visibilityChangePrompt = usePromptControl();
649
+ const fileDeleteDialog = useDialogControl();
650
+ const bulkDeleteDialog = useDialogControl();
651
+ const visibilityChangeDialog = useDialogControl();
118
652
  const [pendingDeleteFile, setPendingDeleteFile] = useState(null);
119
653
  const files = useFiles();
120
654
  // Ensure containerWidth is a number (TypeScript guard)
@@ -139,7 +673,37 @@ const FileManagementScreen = ({
139
673
  const [loadingFileContent, setLoadingFileContent] = useState(false);
140
674
  const [showFileDetailsInViewer, setShowFileDetailsInViewer] = useState(false);
141
675
  const [isPickingDocument, setIsPickingDocument] = useState(false);
142
- const [viewMode, setViewMode] = useState('all');
676
+ const [reduceMotion, setReduceMotion] = useState(false);
677
+
678
+ // Detect reduce-motion preference once on mount + subscribe to changes.
679
+ // Used by `PhotoPickerView` to skip cell stagger animations.
680
+ useEffect(() => {
681
+ let cancelled = false;
682
+ AccessibilityInfo.isReduceMotionEnabled().then(enabled => {
683
+ if (!cancelled) setReduceMotion(enabled);
684
+ }).catch(() => {
685
+ // Defaults to false; no action needed.
686
+ });
687
+ const sub = AccessibilityInfo.addEventListener('reduceMotionChanged', enabled => {
688
+ setReduceMotion(enabled);
689
+ });
690
+ return () => {
691
+ cancelled = true;
692
+ sub.remove();
693
+ };
694
+ }, []);
695
+
696
+ // Image-only picker mode: when the consumer restricts to image MIME types
697
+ // (e.g. avatar picker), photos grid is the more useful default view.
698
+ const isImageOnlyPicker = useMemo(() => {
699
+ if (!selectMode) return false;
700
+ if (disabledMimeTypes.length === 0) return false;
701
+ const blocksVideos = disabledMimeTypes.some(mt => mt === 'video/' || mt.startsWith('video/'));
702
+ const blocksAudio = disabledMimeTypes.some(mt => mt === 'audio/' || mt.startsWith('audio/'));
703
+ const blocksDocs = disabledMimeTypes.some(mt => mt === 'application/pdf' || mt === 'application/' || mt.startsWith('application/'));
704
+ return blocksVideos && blocksAudio && blocksDocs;
705
+ }, [disabledMimeTypes, selectMode]);
706
+ const [viewMode, setViewMode] = useState(isImageOnlyPicker ? 'photos' : 'all');
143
707
  const [searchQuery, setSearchQuery] = useState('');
144
708
  const [sortBy, setSortBy] = useState('date');
145
709
  const [sortOrder, setSortOrder] = useState('desc');
@@ -339,13 +903,13 @@ const FileManagementScreen = ({
339
903
  const response = await oxyServices.listUserFiles(currentPaging.limit, effectiveOffset);
340
904
  const assets = (response.files || []).map(f => ({
341
905
  id: f.id,
342
- filename: f.originalName || f.sha256,
343
- contentType: f.mime,
344
- length: f.size,
906
+ filename: f.originalName ?? f.sha256 ?? '',
907
+ contentType: f.mime ?? '',
908
+ length: f.size ?? 0,
345
909
  chunkSize: 0,
346
- uploadDate: f.createdAt,
347
- metadata: f.metadata || {},
348
- variants: f.variants || []
910
+ uploadDate: f.createdAt ?? '',
911
+ metadata: f.metadata ?? {},
912
+ variants: f.variants ?? []
349
913
  }));
350
914
  if (mode === 'more') {
351
915
  // append
@@ -471,9 +1035,9 @@ const FileManagementScreen = ({
471
1035
  total: selectedFiles.length
472
1036
  });
473
1037
  const maxSize = 50 * 1024 * 1024; // 50MB
474
- const oversizedFiles = selectedFiles.filter(file => file.size > maxSize);
1038
+ const oversizedFiles = selectedFiles.filter(file => candidateSize(file) > maxSize);
475
1039
  if (oversizedFiles.length > 0) {
476
- const fileList = oversizedFiles.map(f => f.name).join(', ');
1040
+ const fileList = oversizedFiles.map(f => candidateName(f, 'file')).join(', ');
477
1041
  toast.error(t('fileManagement.toasts.filesTooLarge', {
478
1042
  files: fileList
479
1043
  }));
@@ -488,12 +1052,14 @@ const FileManagementScreen = ({
488
1052
  total: selectedFiles.length
489
1053
  });
490
1054
  const raw = selectedFiles[i];
491
- const fileName = raw.name || `file-${i + 1}`;
1055
+ const fileName = candidateName(raw, `file-${i + 1}`);
1056
+ const fileSize = candidateSize(raw);
1057
+ const fileType = candidateType(raw);
492
1058
  const optimisticId = `temp-${Date.now()}-${i}-${Math.random().toString(36).substr(2, 9)}`; // Unique ID per file
493
1059
 
494
1060
  try {
495
1061
  // Validate file before upload
496
- if (!raw || !raw.name || raw.size === undefined || raw.size <= 0) {
1062
+ if (!raw || !fileName || fileSize <= 0) {
497
1063
  const errorMsg = `Invalid file: ${fileName}`;
498
1064
  if (__DEV__) {
499
1065
  console.error('Upload validation failed:', {
@@ -507,9 +1073,9 @@ const FileManagementScreen = ({
507
1073
  }
508
1074
  const optimisticFile = {
509
1075
  id: optimisticId,
510
- filename: raw.name,
511
- contentType: raw.type || 'application/octet-stream',
512
- length: raw.size,
1076
+ filename: fileName,
1077
+ contentType: fileType,
1078
+ length: fileSize,
513
1079
  chunkSize: 0,
514
1080
  uploadDate: new Date().toISOString(),
515
1081
  metadata: {
@@ -532,9 +1098,9 @@ const FileManagementScreen = ({
532
1098
  if (f) {
533
1099
  const merged = {
534
1100
  id: f.id,
535
- filename: f.originalName || f.sha256 || raw.name,
536
- contentType: f.mime || raw.type || 'application/octet-stream',
537
- length: f.size || raw.size,
1101
+ filename: f.originalName || f.sha256 || fileName,
1102
+ contentType: f.mime || fileType,
1103
+ length: f.size || fileSize,
538
1104
  chunkSize: 0,
539
1105
  uploadDate: f.createdAt || new Date().toISOString(),
540
1106
  metadata: f.metadata || {},
@@ -565,14 +1131,14 @@ const FileManagementScreen = ({
565
1131
  }
566
1132
  } catch (error) {
567
1133
  failureCount++;
568
- const errorMessage = getErrorMessage(error) || String(error) || 'Upload failed';
1134
+ const errorMessage = getErrorMessage(error) || 'Upload failed';
569
1135
  const fullError = `${fileName}: ${errorMessage}`;
570
1136
  errors.push(fullError);
571
1137
  if (__DEV__) {
572
1138
  console.error('File upload failed:', {
573
1139
  fileName,
574
- fileSize: raw.size,
575
- fileType: raw.type,
1140
+ fileSize,
1141
+ fileType,
576
1142
  error: errorMessage,
577
1143
  stack: error instanceof Error ? error.stack : undefined
578
1144
  });
@@ -607,8 +1173,6 @@ const FileManagementScreen = ({
607
1173
  }
608
1174
  return uploadedFiles;
609
1175
  };
610
-
611
- // biome-ignore lint/suspicious/noExplicitAny: Files from document picker may have extra properties like uri
612
1176
  const handleFileSelection = useCallback(async selectedFiles => {
613
1177
  const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
614
1178
  const processedFiles = [];
@@ -621,55 +1185,55 @@ const FileManagementScreen = ({
621
1185
  toast.error(t('fileManagement.toasts.invalidFileMissing'));
622
1186
  continue;
623
1187
  }
624
- if (!file.name || typeof file.name !== 'string') {
1188
+ const name = candidateName(file, '');
1189
+ if (!name) {
625
1190
  if (__DEV__) {
626
1191
  console.error('Invalid file: missing or invalid name property', file);
627
1192
  }
628
1193
  toast.error(t('fileManagement.toasts.invalidFileName'));
629
1194
  continue;
630
1195
  }
631
- if (file.size === undefined || file.size === null || Number.isNaN(file.size)) {
1196
+ const size = file.size;
1197
+ if (size === undefined || size === null || Number.isNaN(size)) {
632
1198
  if (__DEV__) {
633
1199
  console.error('Invalid file: missing or invalid size property', file);
634
1200
  }
635
1201
  toast.error(t('fileManagement.toasts.invalidFileSize', {
636
- name: file.name || 'unknown'
1202
+ name
637
1203
  }));
638
1204
  continue;
639
1205
  }
640
- if (file.size <= 0) {
1206
+ if (size <= 0) {
641
1207
  if (__DEV__) {
642
1208
  console.error('Invalid file: file size is zero or negative', file);
643
1209
  }
644
1210
  toast.error(t('fileManagement.toasts.fileEmpty', {
645
- name: file.name
1211
+ name
646
1212
  }));
647
1213
  continue;
648
1214
  }
649
1215
 
650
1216
  // Validate file size
651
- if (file.size > MAX_FILE_SIZE) {
1217
+ if (size > MAX_FILE_SIZE) {
652
1218
  toast.error(t('fileManagement.toasts.fileTooLarge', {
653
- name: file.name,
1219
+ name,
654
1220
  maxSize: formatFileSize(MAX_FILE_SIZE)
655
1221
  }));
656
1222
  continue;
657
1223
  }
658
-
659
- // Ensure file has a type property
660
- const fileType = file.type || 'application/octet-stream';
1224
+ const fileType = candidateType(file);
661
1225
 
662
1226
  // Generate preview for images - unified approach
663
1227
  let preview;
664
1228
  if (fileType.startsWith('image/')) {
665
1229
  // Try to use file URI from expo-document-picker if available (works on all platforms)
666
- const fileUri = file.uri;
667
- if (fileUri && typeof fileUri === 'string' && (fileUri.startsWith('file://') || fileUri.startsWith('content://') || fileUri.startsWith('http://') || fileUri.startsWith('https://') || fileUri.startsWith('blob:'))) {
1230
+ const fileUri = candidateUri(file);
1231
+ if (fileUri && (fileUri.startsWith('file://') || fileUri.startsWith('content://') || fileUri.startsWith('http://') || fileUri.startsWith('https://') || fileUri.startsWith('blob:'))) {
668
1232
  preview = fileUri;
669
1233
  } else {
670
- // Fallback: create blob URL if possible (works on web)
1234
+ // Fallback: create blob URL if possible (works on web only)
671
1235
  try {
672
- if (file instanceof File || file instanceof Blob) {
1236
+ if (typeof File !== 'undefined' && file instanceof File || typeof Blob !== 'undefined' && file instanceof Blob) {
673
1237
  preview = URL.createObjectURL(file);
674
1238
  }
675
1239
  } catch (error) {
@@ -683,8 +1247,8 @@ const FileManagementScreen = ({
683
1247
  processedFiles.push({
684
1248
  file,
685
1249
  preview,
686
- size: file.size,
687
- name: file.name,
1250
+ size,
1251
+ name,
688
1252
  type: fileType
689
1253
  });
690
1254
  }
@@ -696,7 +1260,7 @@ const FileManagementScreen = ({
696
1260
  // Show preview modal for user to review files before upload
697
1261
  setPendingFiles(processedFiles);
698
1262
  setShowUploadPreview(true);
699
- }, []);
1263
+ }, [t]);
700
1264
  const handleConfirmUpload = async () => {
701
1265
  if (pendingFiles.length === 0) return;
702
1266
  setShowUploadPreview(false);
@@ -876,8 +1440,8 @@ const FileManagementScreen = ({
876
1440
  id: fileId,
877
1441
  name: filename
878
1442
  });
879
- fileDeletePrompt.open();
880
- }, [fileDeletePrompt]);
1443
+ fileDeleteDialog.open();
1444
+ }, [fileDeleteDialog]);
881
1445
  const handleFileDelete = useCallback(async () => {
882
1446
  if (!pendingDeleteFile) return;
883
1447
  const {
@@ -911,8 +1475,8 @@ const FileManagementScreen = ({
911
1475
  }, [pendingDeleteFile, storeSetDeleting, oxyServices, loadFiles, t]);
912
1476
  const confirmBulkDelete = useCallback(() => {
913
1477
  if (selectedIds.size === 0) return;
914
- bulkDeletePrompt.open();
915
- }, [selectedIds.size, bulkDeletePrompt]);
1478
+ bulkDeleteDialog.open();
1479
+ }, [selectedIds.size, bulkDeleteDialog]);
916
1480
  const handleBulkDelete = useCallback(async () => {
917
1481
  if (selectedIds.size === 0) return;
918
1482
  try {
@@ -1348,8 +1912,8 @@ const FileManagementScreen = ({
1348
1912
  }, file.id);
1349
1913
  };
1350
1914
 
1351
- // GroupedSection-based file items (for 'all' view) replacing legacy flat list look
1352
- // biome-ignore lint/suspicious/noExplicitAny: GroupedSection items have dynamic props
1915
+ // SettingsListItem-based file items (for 'all' view)
1916
+ // biome-ignore lint/suspicious/noExplicitAny: file items have dynamic props
1353
1917
  const groupedFileItems = useMemo(() => {
1354
1918
  // filteredFiles is already sorted, so just use it directly
1355
1919
  const sortedFiles = filteredFiles;
@@ -1365,11 +1929,11 @@ const FileManagementScreen = ({
1365
1929
  const hasPreview = isImage || isPDF || isVideo;
1366
1930
  const isSelected = selectedIds.has(file.id);
1367
1931
 
1368
- // Create customIcon for preview thumbnails (36x36 to match GroupedItem iconContainer)
1369
- let customIcon;
1932
+ // Create icon for preview thumbnails (36x36)
1933
+ let fileIcon;
1370
1934
  if (hasPreview) {
1371
1935
  if (isImage) {
1372
- customIcon = /*#__PURE__*/_jsx(View, {
1936
+ fileIcon = /*#__PURE__*/_jsx(View, {
1373
1937
  style: {
1374
1938
  width: 36,
1375
1939
  height: 36,
@@ -1394,7 +1958,7 @@ const FileManagementScreen = ({
1394
1958
  })
1395
1959
  });
1396
1960
  } else if (isVideo) {
1397
- customIcon = /*#__PURE__*/_jsxs(View, {
1961
+ fileIcon = /*#__PURE__*/_jsxs(View, {
1398
1962
  style: {
1399
1963
  width: 36,
1400
1964
  height: 36,
@@ -1437,7 +2001,7 @@ const FileManagementScreen = ({
1437
2001
  })]
1438
2002
  });
1439
2003
  } else if (isPDF) {
1440
- customIcon = /*#__PURE__*/_jsx(View, {
2004
+ fileIcon = /*#__PURE__*/_jsx(View, {
1441
2005
  style: {
1442
2006
  width: 36,
1443
2007
  height: 36,
@@ -1456,12 +2020,13 @@ const FileManagementScreen = ({
1456
2020
  }
1457
2021
  return {
1458
2022
  id: file.id,
1459
- customIcon: customIcon,
1460
- icon: !hasPreview ? getFileIcon(file.contentType) : undefined,
1461
- iconColor: colors.primary,
2023
+ icon: fileIcon ?? (!hasPreview ? /*#__PURE__*/_jsx(Ionicons, {
2024
+ name: getFileIcon(file.contentType),
2025
+ size: 20,
2026
+ color: colors.primary
2027
+ }) : undefined),
1462
2028
  title: file.filename,
1463
- subtitle: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1464
- theme: theme,
2029
+ description: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1465
2030
  onPress: () => {
1466
2031
  // Support selection in regular mode with long press or if already selecting
1467
2032
  if (!selectMode && selectedIds.size > 0) {
@@ -1471,20 +2036,8 @@ const FileManagementScreen = ({
1471
2036
  handleFileOpen(file);
1472
2037
  }
1473
2038
  },
1474
- onLongPress: !selectMode ? () => {
1475
- // Enable selection mode on long press
1476
- if (selectedIds.size === 0) {
1477
- setSelectedIds(new Set([file.id]));
1478
- } else {
1479
- toggleSelect(file);
1480
- }
1481
- } : undefined,
1482
- showChevron: false,
1483
- dense: true,
1484
- multiRow: !!file.metadata?.description,
1485
- selected: (selectMode || selectedIds.size > 0) && isSelected,
1486
2039
  // Hide action buttons when selecting (in selectMode or bulk operations mode)
1487
- customContent: !selectMode && selectedIds.size === 0 ? /*#__PURE__*/_jsxs(View, {
2040
+ rightElement: !selectMode && selectedIds.size === 0 ? /*#__PURE__*/_jsxs(View, {
1488
2041
  style: fileManagementStyles.groupedActions,
1489
2042
  children: [(isImage || isVideo || file.contentType.includes('pdf')) && /*#__PURE__*/_jsx(TouchableOpacity, {
1490
2043
  style: [fileManagementStyles.groupedActionBtn, {
@@ -1521,13 +2074,6 @@ const FileManagementScreen = ({
1521
2074
  color: colors.error
1522
2075
  })
1523
2076
  })]
1524
- }) : undefined,
1525
- customContentBelow: file.metadata?.description ? /*#__PURE__*/_jsx(Text, {
1526
- style: [fileManagementStyles.groupedDescription, {
1527
- color: bloomTheme.isDark ? '#AAAAAA' : '#666666'
1528
- }],
1529
- numberOfLines: 2,
1530
- children: file.metadata.description
1531
2077
  }) : undefined
1532
2078
  };
1533
2079
  });
@@ -1865,7 +2411,7 @@ const FileManagementScreen = ({
1865
2411
  });
1866
2412
  };
1867
2413
 
1868
- // Skeleton file item matching GroupedSection structure
2414
+ // Skeleton file item matching SettingsListItem structure
1869
2415
  const SkeletonFileItem = ({
1870
2416
  index
1871
2417
  }) => /*#__PURE__*/_jsxs(View, {
@@ -1996,6 +2542,51 @@ const FileManagementScreen = ({
1996
2542
  return /*#__PURE__*/_jsx(SkeletonLoader, {});
1997
2543
  }
1998
2544
 
2545
+ // Dedicated flagship-style photo picker view used in the avatar-picker
2546
+ // context (selectMode + image-only filter). The picker is intentionally
2547
+ // minimal: black backdrop, edge-to-edge grid, translucent header. The
2548
+ // standalone file manager (non-picker browse) keeps the existing UI.
2549
+ if (isImageOnlyPicker && !showUploadPreview) {
2550
+ const photosOnly = filteredFiles.filter(file => file.contentType.startsWith('image/'));
2551
+ const isOwner = user?.id === targetUserId;
2552
+ const allowUpload = isOwner && allowUploadInSelectMode;
2553
+ return /*#__PURE__*/_jsxs(_Fragment, {
2554
+ children: [/*#__PURE__*/_jsx(PhotoPickerView, {
2555
+ photos: photosOnly,
2556
+ selectedIds: selectedIds,
2557
+ multiSelect: multiSelect,
2558
+ maxSelection: maxSelection,
2559
+ allowUpload: allowUpload,
2560
+ refreshing: refreshing,
2561
+ uploading: uploading,
2562
+ isPickingDocument: isPickingDocument,
2563
+ uploadProgress: uploadProgress,
2564
+ hasMore: paging.hasMore,
2565
+ loadingMore: paging.loadingMore,
2566
+ reduceMotion: reduceMotion,
2567
+ getThumbUrl: getSafeDownloadUrlCallback,
2568
+ primaryColor: colors.primary,
2569
+ isOwner: isOwner,
2570
+ onTogglePhoto: toggleSelect,
2571
+ onPreviewPhoto: file => showFileDetailsModal(file),
2572
+ onUpload: handleFileUpload,
2573
+ onRefresh: () => loadFiles('refresh'),
2574
+ onLoadMore: () => loadFiles('more'),
2575
+ onCancel: () => {
2576
+ if (onClose) onClose();else goBack?.();
2577
+ },
2578
+ onConfirm: confirmMultiSelection,
2579
+ t: t
2580
+ }), /*#__PURE__*/_jsx(FileDetailsModal, {
2581
+ control: fileDetailsControl,
2582
+ file: selectedFile,
2583
+ onDownload: handleFileDownload,
2584
+ onDelete: confirmFileDelete,
2585
+ isOwner: isOwner
2586
+ })]
2587
+ });
2588
+ }
2589
+
1999
2590
  // If a file is opened, show the file viewer
2000
2591
  if (!selectMode && openedFile) {
2001
2592
  return /*#__PURE__*/_jsxs(_Fragment, {
@@ -2083,7 +2674,7 @@ const FileManagementScreen = ({
2083
2674
  key: 'visibility',
2084
2675
  text: t('fileManagement.visibility'),
2085
2676
  onPress: () => {
2086
- visibilityChangePrompt.open();
2677
+ visibilityChangeDialog.open();
2087
2678
  },
2088
2679
  icon: 'eye'
2089
2680
  }] : undefined,
@@ -2108,41 +2699,53 @@ const FileManagementScreen = ({
2108
2699
  icon: viewMode === 'all' ? 'folder' : 'folder-outline',
2109
2700
  primaryColor: colors.primary,
2110
2701
  textColor: colors.text,
2111
- style: fileManagementStyles.viewModeButton
2702
+ style: fileManagementStyles.viewModeButton,
2703
+ accessibilityLabel: t('fileManagement.a11y.viewAll') || 'Show all files'
2112
2704
  }), /*#__PURE__*/_jsx(AnimatedButton, {
2113
2705
  isSelected: viewMode === 'photos',
2114
2706
  onPress: () => setViewMode('photos'),
2115
2707
  icon: viewMode === 'photos' ? 'image-multiple' : 'image-multiple-outline',
2116
2708
  primaryColor: colors.primary,
2117
2709
  textColor: colors.text,
2118
- style: fileManagementStyles.viewModeButton
2119
- }), /*#__PURE__*/_jsx(AnimatedButton, {
2120
- isSelected: viewMode === 'videos',
2121
- onPress: () => setViewMode('videos'),
2122
- icon: viewMode === 'videos' ? 'video' : 'video-outline',
2123
- primaryColor: colors.primary,
2124
- textColor: colors.text,
2125
- style: fileManagementStyles.viewModeButton
2126
- }), /*#__PURE__*/_jsx(AnimatedButton, {
2127
- isSelected: viewMode === 'documents',
2128
- onPress: () => setViewMode('documents'),
2129
- icon: viewMode === 'documents' ? 'file-document' : 'file-document-outline',
2130
- primaryColor: colors.primary,
2131
- textColor: colors.text,
2132
- style: fileManagementStyles.viewModeButton
2133
- }), /*#__PURE__*/_jsx(AnimatedButton, {
2134
- isSelected: viewMode === 'audio',
2135
- onPress: () => setViewMode('audio'),
2136
- icon: viewMode === 'audio' ? 'music-note' : 'music-note-outline',
2137
- primaryColor: colors.primary,
2138
- textColor: colors.text,
2139
- style: fileManagementStyles.viewModeButton
2710
+ style: fileManagementStyles.viewModeButton,
2711
+ accessibilityLabel: t('fileManagement.a11y.viewPhotos') || 'Show photos only'
2712
+ }), !isImageOnlyPicker && /*#__PURE__*/_jsxs(_Fragment, {
2713
+ children: [/*#__PURE__*/_jsx(AnimatedButton, {
2714
+ isSelected: viewMode === 'videos',
2715
+ onPress: () => setViewMode('videos'),
2716
+ icon: viewMode === 'videos' ? 'video' : 'video-outline',
2717
+ primaryColor: colors.primary,
2718
+ textColor: colors.text,
2719
+ style: fileManagementStyles.viewModeButton,
2720
+ accessibilityLabel: t('fileManagement.a11y.viewVideos') || 'Show videos only'
2721
+ }), /*#__PURE__*/_jsx(AnimatedButton, {
2722
+ isSelected: viewMode === 'documents',
2723
+ onPress: () => setViewMode('documents'),
2724
+ icon: viewMode === 'documents' ? 'file-document' : 'file-document-outline',
2725
+ primaryColor: colors.primary,
2726
+ textColor: colors.text,
2727
+ style: fileManagementStyles.viewModeButton,
2728
+ accessibilityLabel: t('fileManagement.a11y.viewDocuments') || 'Show documents only'
2729
+ }), /*#__PURE__*/_jsx(AnimatedButton, {
2730
+ isSelected: viewMode === 'audio',
2731
+ onPress: () => setViewMode('audio'),
2732
+ icon: viewMode === 'audio' ? 'music-note' : 'music-note-outline',
2733
+ primaryColor: colors.primary,
2734
+ textColor: colors.text,
2735
+ style: fileManagementStyles.viewModeButton,
2736
+ accessibilityLabel: t('fileManagement.a11y.viewAudio') || 'Show audio only'
2737
+ })]
2140
2738
  })]
2141
2739
  })
2142
2740
  }), /*#__PURE__*/_jsxs(TouchableOpacity, {
2143
2741
  style: [fileManagementStyles.sortButton, {
2144
2742
  backgroundColor: colors.card
2145
2743
  }],
2744
+ accessibilityRole: "button",
2745
+ accessibilityLabel: t('fileManagement.a11y.sortBy', {
2746
+ field: sortBy,
2747
+ order: sortOrder === 'asc' ? 'ascending' : 'descending'
2748
+ }) || `Sort by ${sortBy}, ${sortOrder === 'asc' ? 'ascending' : 'descending'}`,
2146
2749
  onPress: () => {
2147
2750
  // Cycle through sort options: date -> size -> name -> type -> date
2148
2751
  const sortOrder = ['date', 'size', 'name', 'type'];
@@ -2164,11 +2767,16 @@ const FileManagementScreen = ({
2164
2767
  color: colors.textSecondary
2165
2768
  })]
2166
2769
  }), user?.id === targetUserId && (!selectMode || selectMode && allowUploadInSelectMode) && /*#__PURE__*/_jsx(TouchableOpacity, {
2167
- style: [fileManagementStyles.uploadButton, {
2770
+ style: [fileManagementStyles.uploadButton, isImageOnlyPicker && fileManagementStyles.uploadButtonExtended, {
2168
2771
  backgroundColor: colors.primary
2169
2772
  }],
2170
2773
  onPress: handleFileUpload,
2171
2774
  disabled: uploading || isPickingDocument,
2775
+ accessibilityRole: "button",
2776
+ accessibilityLabel: isImageOnlyPicker ? t('fileManagement.a11y.uploadFromDevice') || 'Upload photo from device' : t('fileManagement.a11y.uploadFile') || 'Upload file',
2777
+ accessibilityState: {
2778
+ busy: uploading || isPickingDocument
2779
+ },
2172
2780
  children: uploading ? /*#__PURE__*/_jsxs(View, {
2173
2781
  style: fileManagementStyles.uploadProgress,
2174
2782
  children: [/*#__PURE__*/_jsx(ActivityIndicator, {
@@ -2181,6 +2789,17 @@ const FileManagementScreen = ({
2181
2789
  }) : isPickingDocument ? /*#__PURE__*/_jsx(ActivityIndicator, {
2182
2790
  size: "small",
2183
2791
  color: "#FFFFFF"
2792
+ }) : isImageOnlyPicker ? /*#__PURE__*/_jsxs(View, {
2793
+ style: fileManagementStyles.uploadButtonContent,
2794
+ children: [/*#__PURE__*/_jsx(Ionicons, {
2795
+ name: "cloud-upload",
2796
+ size: 18,
2797
+ color: "#FFFFFF"
2798
+ }), /*#__PURE__*/_jsx(Text, {
2799
+ style: fileManagementStyles.uploadButtonLabel,
2800
+ numberOfLines: 1,
2801
+ children: t('fileManagement.upload') || 'Upload'
2802
+ })]
2184
2803
  }) : /*#__PURE__*/_jsx(Ionicons, {
2185
2804
  name: "add",
2186
2805
  size: 22,
@@ -2312,8 +2931,15 @@ const FileManagementScreen = ({
2312
2931
  })]
2313
2932
  })]
2314
2933
  }) : filteredFiles.length === 0 ? renderEmptyState() : /*#__PURE__*/_jsxs(_Fragment, {
2315
- children: [/*#__PURE__*/_jsx(GroupedSection, {
2316
- items: groupedFileItems
2934
+ children: [/*#__PURE__*/_jsx(SettingsListGroup, {
2935
+ children: groupedFileItems.map(item => /*#__PURE__*/_jsx(SettingsListItem, {
2936
+ icon: item.icon,
2937
+ title: item.title,
2938
+ description: item.description,
2939
+ onPress: item.onPress,
2940
+ showChevron: false,
2941
+ rightElement: item.rightElement
2942
+ }, item.id))
2317
2943
  }), paging.loadingMore && /*#__PURE__*/_jsxs(View, {
2318
2944
  style: fileManagementStyles.loadingMoreBar,
2319
2945
  children: [/*#__PURE__*/_jsx(ActivityIndicator, {
@@ -2369,51 +2995,53 @@ const FileManagementScreen = ({
2369
2995
  color: colors.primary
2370
2996
  })]
2371
2997
  })
2372
- }), /*#__PURE__*/_jsx(Prompt.Basic, {
2373
- control: fileDeletePrompt,
2998
+ }), /*#__PURE__*/_jsx(Dialog, {
2999
+ control: fileDeleteDialog,
2374
3000
  title: t('fileManagement.deleteFile') || 'Delete File',
2375
3001
  description: pendingDeleteFile ? t('fileManagement.confirms.deleteFile', {
2376
3002
  filename: pendingDeleteFile.name
2377
3003
  }) : '',
2378
- onConfirm: handleFileDelete,
2379
- confirmButtonCta: t('fileManagement.confirm') || 'Delete',
2380
- confirmButtonColor: "negative"
2381
- }), /*#__PURE__*/_jsx(Prompt.Basic, {
2382
- control: bulkDeletePrompt,
3004
+ actions: [{
3005
+ label: t('fileManagement.confirm') || 'Delete',
3006
+ color: 'destructive',
3007
+ onPress: handleFileDelete
3008
+ }, {
3009
+ label: t('common.cancel') || 'Cancel',
3010
+ color: 'cancel'
3011
+ }]
3012
+ }), /*#__PURE__*/_jsx(Dialog, {
3013
+ control: bulkDeleteDialog,
2383
3014
  title: t('fileManagement.deleteFiles') || 'Delete Files',
2384
3015
  description: t('fileManagement.confirms.deleteFiles', {
2385
3016
  count: selectedIds.size
2386
3017
  }),
2387
- onConfirm: handleBulkDelete,
2388
- confirmButtonCta: t('fileManagement.confirm') || 'Delete',
2389
- confirmButtonColor: "negative"
2390
- }), /*#__PURE__*/_jsxs(Prompt.Outer, {
2391
- control: visibilityChangePrompt,
2392
- children: [/*#__PURE__*/_jsxs(Prompt.Content, {
2393
- children: [/*#__PURE__*/_jsx(Prompt.TitleText, {
2394
- children: t('fileManagement.changeVisibility') || 'Change Visibility'
2395
- }), /*#__PURE__*/_jsx(Prompt.DescriptionText, {
2396
- children: t('fileManagement.changeVisibilityConfirm', {
2397
- count: selectedIds.size
2398
- })
2399
- })]
2400
- }), /*#__PURE__*/_jsxs(Prompt.Actions, {
2401
- children: [/*#__PURE__*/_jsx(Prompt.Action, {
2402
- cta: t('fileManagement.private') || 'Private',
2403
- onPress: () => handleBulkVisibilityChange('private'),
2404
- color: "primary"
2405
- }), /*#__PURE__*/_jsx(Prompt.Action, {
2406
- cta: t('fileManagement.public') || 'Public',
2407
- onPress: () => handleBulkVisibilityChange('public'),
2408
- color: "primary_subtle"
2409
- }), /*#__PURE__*/_jsx(Prompt.Action, {
2410
- cta: t('fileManagement.unlisted') || 'Unlisted',
2411
- onPress: () => handleBulkVisibilityChange('unlisted'),
2412
- color: "primary_subtle"
2413
- }), /*#__PURE__*/_jsx(Prompt.Cancel, {
2414
- cta: t('common.cancel') || 'Cancel'
2415
- })]
2416
- })]
3018
+ actions: [{
3019
+ label: t('fileManagement.confirm') || 'Delete',
3020
+ color: 'destructive',
3021
+ onPress: handleBulkDelete
3022
+ }, {
3023
+ label: t('common.cancel') || 'Cancel',
3024
+ color: 'cancel'
3025
+ }]
3026
+ }), /*#__PURE__*/_jsx(Dialog, {
3027
+ control: visibilityChangeDialog,
3028
+ title: t('fileManagement.changeVisibility') || 'Change Visibility',
3029
+ description: t('fileManagement.changeVisibilityConfirm', {
3030
+ count: selectedIds.size
3031
+ }),
3032
+ actions: [{
3033
+ label: t('fileManagement.private') || 'Private',
3034
+ onPress: () => handleBulkVisibilityChange('private')
3035
+ }, {
3036
+ label: t('fileManagement.public') || 'Public',
3037
+ onPress: () => handleBulkVisibilityChange('public')
3038
+ }, {
3039
+ label: t('fileManagement.unlisted') || 'Unlisted',
3040
+ onPress: () => handleBulkVisibilityChange('unlisted')
3041
+ }, {
3042
+ label: t('common.cancel') || 'Cancel',
3043
+ color: 'cancel'
3044
+ }]
2417
3045
  })]
2418
3046
  });
2419
3047
  };