@oxy.so/services 11.2.0-oxy-one.3 → 11.2.0-oxy-one.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1025) hide show
  1. package/lib/commonjs/assets/assets/icons/OxyServices.tsx +42 -40
  2. package/lib/commonjs/assets/assets/illustrations/HighFive.tsx +58 -31
  3. package/lib/commonjs/assets/icons/OxyServices.js.map +1 -1
  4. package/lib/commonjs/assets/illustrations/HighFive.js.map +1 -1
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/notifications/deviceNotifications.js +8 -4
  7. package/lib/commonjs/notifications/deviceNotifications.js.map +1 -1
  8. package/lib/commonjs/ui/analytics/productAnalytics.js.map +1 -1
  9. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
  10. package/lib/commonjs/ui/components/BenefitList.js.map +1 -1
  11. package/lib/commonjs/ui/components/BloomLocaleBridge.js.map +1 -1
  12. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  13. package/lib/commonjs/ui/components/FollowTargetButton.js +1 -1
  14. package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
  15. package/lib/commonjs/ui/components/LanguageBridge.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  17. package/lib/commonjs/ui/components/OxyAuthPrompt.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  19. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  20. package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
  21. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  22. package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -1
  23. package/lib/commonjs/ui/components/PeableButton.js.map +1 -1
  24. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  25. package/lib/commonjs/ui/components/ProfileSummaryCard.js +1 -1
  26. package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -1
  27. package/lib/commonjs/ui/components/RequireOxyAuth.js.map +1 -1
  28. package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
  29. package/lib/commonjs/ui/components/SurfaceHeaderAction.js.map +1 -1
  30. package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
  31. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  32. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
  33. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -1
  34. package/lib/commonjs/ui/components/authChooser/types.js.map +1 -1
  35. package/lib/commonjs/ui/components/feedback/constants.js.map +1 -1
  36. package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -1
  37. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  38. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +1 -1
  39. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  40. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  41. package/lib/commonjs/ui/components/followButtonAccessibility.js.map +1 -1
  42. package/lib/commonjs/ui/components/followRules.js.map +1 -1
  43. package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  44. package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -1
  45. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  46. package/lib/commonjs/ui/components/oauthNavigation.js.map +1 -1
  47. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  48. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  49. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  50. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  51. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +1 -1
  52. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  53. package/lib/commonjs/ui/components/payment/constants.js.map +1 -1
  54. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
  55. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  56. package/lib/commonjs/ui/components/signIn/InlineCommonsQr.js.map +1 -1
  57. package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js.map +1 -1
  58. package/lib/commonjs/ui/components/signIn/OxyAuthScreen.js.map +1 -1
  59. package/lib/commonjs/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -1
  60. package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
  61. package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
  62. package/lib/commonjs/ui/components/signIn/OxyPasswordPanel.js.map +1 -1
  63. package/lib/commonjs/ui/components/signIn/OxySignInPanel.js.map +1 -1
  64. package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js.map +1 -1
  65. package/lib/commonjs/ui/components/signIn/ReauthStep.js.map +1 -1
  66. package/lib/commonjs/ui/components/signIn/accountFlowParts.js.map +1 -1
  67. package/lib/commonjs/ui/components/signIn/artwork.js.map +1 -1
  68. package/lib/commonjs/ui/components/signIn/signInFlowStore.js.map +1 -1
  69. package/lib/commonjs/ui/components/styles/overlay.js.map +1 -1
  70. package/lib/commonjs/ui/components/styles/shadow.js.map +1 -1
  71. package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
  72. package/lib/commonjs/ui/components/utils/hasTouchHandler.js.map +1 -1
  73. package/lib/commonjs/ui/components/utils/roundLayoutSize.js.map +1 -1
  74. package/lib/commonjs/ui/components/utils/splitStyles.js.map +1 -1
  75. package/lib/commonjs/ui/constants/spacing.js.map +1 -1
  76. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  77. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  78. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  79. package/lib/commonjs/ui/context/isolatedOAuthSession.js.map +1 -1
  80. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  81. package/lib/commonjs/ui/hooks/accountDialogSnapshot.js.map +1 -1
  82. package/lib/commonjs/ui/hooks/accountQueryPersistence.js.map +1 -1
  83. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  84. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  85. package/lib/commonjs/ui/hooks/persistedQueryCache.js.map +1 -1
  86. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  87. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  88. package/lib/commonjs/ui/hooks/queries/useFileQueries.js.map +1 -1
  89. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  90. package/lib/commonjs/ui/hooks/queries/usePersonalPlans.js.map +1 -1
  91. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  92. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  93. package/lib/commonjs/ui/hooks/queries/userCache.js +38 -38
  94. package/lib/commonjs/ui/hooks/queries/userCache.js.map +1 -1
  95. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  96. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  97. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  98. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  99. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  100. package/lib/commonjs/ui/hooks/useDeviceSwitcher.js.map +1 -1
  101. package/lib/commonjs/ui/hooks/useFileFiltering.js.map +1 -1
  102. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  103. package/lib/commonjs/ui/hooks/useI18n.js.map +1 -1
  104. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  105. package/lib/commonjs/ui/hooks/useReduceMotion.js.map +1 -1
  106. package/lib/commonjs/ui/hooks/useResolvedFileUrls.js.map +1 -1
  107. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  108. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  109. package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
  110. package/lib/commonjs/ui/hooks/useSurfaceFrameWidth.js.map +1 -1
  111. package/lib/commonjs/ui/icons/Ionicons.js.map +1 -1
  112. package/lib/commonjs/ui/icons/MaterialCommunityIcons.js.map +1 -1
  113. package/lib/commonjs/ui/icons/decorativeIconSet.js.map +1 -1
  114. package/lib/commonjs/ui/isFrontend.js.map +1 -1
  115. package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
  116. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  117. package/lib/commonjs/ui/navigation/surfaces.js.map +1 -1
  118. package/lib/commonjs/ui/oauth/applicationSessionLane.js.map +1 -1
  119. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
  120. package/lib/commonjs/ui/oauth/browserBridge.js.map +1 -1
  121. package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -1
  122. package/lib/commonjs/ui/oauth/nativeAuthTransport.js.map +1 -1
  123. package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -1
  124. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
  125. package/lib/commonjs/ui/oauth/oauthPopupMessages.js.map +1 -1
  126. package/lib/commonjs/ui/runtime/createOxyRuntime.js.map +1 -1
  127. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  128. package/lib/commonjs/ui/screens/AccountSecurityPanelScreen.js.map +1 -1
  129. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  130. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  131. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  132. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  133. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  134. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  135. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  136. package/lib/commonjs/ui/screens/DomainsScreen.js.map +1 -1
  137. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +1 -1
  138. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  139. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  140. package/lib/commonjs/ui/screens/FileManagementScreen.js +2 -5
  141. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  142. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  143. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  144. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  145. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  146. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  147. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  148. package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
  149. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  150. package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
  151. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +3 -3
  152. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  153. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  154. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  155. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  156. package/lib/commonjs/ui/screens/UserListScreen.js +1 -1
  157. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  158. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  159. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  160. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
  161. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +7 -7
  162. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  163. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
  164. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  165. package/lib/commonjs/ui/screens/fileManagement/photoGridLayout.js.map +1 -1
  166. package/lib/commonjs/ui/screens/fileManagement/shared.js.map +1 -1
  167. package/lib/commonjs/ui/screens/linkFormat.js.map +1 -1
  168. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  169. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  170. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  171. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  172. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  173. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  174. package/lib/commonjs/ui/server.js.map +1 -1
  175. package/lib/commonjs/ui/session/authStore.js.map +1 -1
  176. package/lib/commonjs/ui/session/backgroundSession.js.map +1 -1
  177. package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
  178. package/lib/commonjs/ui/session/deviceCredentialTracker.js.map +1 -1
  179. package/lib/commonjs/ui/session/identityBinding.js.map +1 -1
  180. package/lib/commonjs/ui/session/sharedDeviceCredentialStore.js.map +1 -1
  181. package/lib/commonjs/ui/session/tokenLossRecovery.js.map +1 -1
  182. package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
  183. package/lib/commonjs/ui/stores/assetStore.js.map +1 -1
  184. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  185. package/lib/commonjs/ui/utils/accountDeletionHandoff.js.map +1 -1
  186. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  187. package/lib/commonjs/ui/utils/clipboard.native.js +23 -6
  188. package/lib/commonjs/ui/utils/clipboard.native.js.map +1 -1
  189. package/lib/commonjs/ui/utils/commonsStoreLinks.js.map +1 -1
  190. package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
  191. package/lib/commonjs/ui/utils/fileManagement.js +24 -24
  192. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  193. package/lib/commonjs/ui/utils/iconNames.js.map +1 -1
  194. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  195. package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
  196. package/lib/commonjs/utils/hookUtils.js +2 -4
  197. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  198. package/lib/module/assets/assets/icons/OxyServices.tsx +42 -40
  199. package/lib/module/assets/assets/illustrations/HighFive.tsx +58 -31
  200. package/lib/module/assets/icons/OxyServices.js.map +1 -1
  201. package/lib/module/assets/illustrations/HighFive.js.map +1 -1
  202. package/lib/module/index.js.map +1 -1
  203. package/lib/module/notifications/deviceNotifications.js +8 -4
  204. package/lib/module/notifications/deviceNotifications.js.map +1 -1
  205. package/lib/module/ui/analytics/productAnalytics.js.map +1 -1
  206. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  207. package/lib/module/ui/client.js.map +1 -1
  208. package/lib/module/ui/components/BenefitList.js.map +1 -1
  209. package/lib/module/ui/components/BloomLocaleBridge.js.map +1 -1
  210. package/lib/module/ui/components/FollowButton.js.map +1 -1
  211. package/lib/module/ui/components/FollowTargetButton.js +1 -1
  212. package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
  213. package/lib/module/ui/components/LanguageBridge.js.map +1 -1
  214. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  215. package/lib/module/ui/components/OxyAuthPrompt.js.map +1 -1
  216. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  217. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  218. package/lib/module/ui/components/OxySignInButton.js +1 -1
  219. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  220. package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -1
  221. package/lib/module/ui/components/PeableButton.js.map +1 -1
  222. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  223. package/lib/module/ui/components/ProfileSummaryCard.js +1 -1
  224. package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -1
  225. package/lib/module/ui/components/RequireOxyAuth.js.map +1 -1
  226. package/lib/module/ui/components/SettingsIcon.js.map +1 -1
  227. package/lib/module/ui/components/SurfaceHeaderAction.js.map +1 -1
  228. package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
  229. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  230. package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
  231. package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -1
  232. package/lib/module/ui/components/authChooser/types.js.map +1 -1
  233. package/lib/module/ui/components/feedback/constants.js.map +1 -1
  234. package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -1
  235. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  236. package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
  237. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  238. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  239. package/lib/module/ui/components/followButtonAccessibility.js.map +1 -1
  240. package/lib/module/ui/components/followRules.js.map +1 -1
  241. package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  242. package/lib/module/ui/components/logo/LogoText.js.map +1 -1
  243. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  244. package/lib/module/ui/components/oauthNavigation.js.map +1 -1
  245. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  246. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  247. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  248. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  249. package/lib/module/ui/components/payment/PaymentSummaryStep.js +1 -1
  250. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  251. package/lib/module/ui/components/payment/constants.js.map +1 -1
  252. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
  253. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  254. package/lib/module/ui/components/signIn/InlineCommonsQr.js.map +1 -1
  255. package/lib/module/ui/components/signIn/OxyAccountPicker.js.map +1 -1
  256. package/lib/module/ui/components/signIn/OxyAuthScreen.js.map +1 -1
  257. package/lib/module/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -1
  258. package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
  259. package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
  260. package/lib/module/ui/components/signIn/OxyPasswordPanel.js.map +1 -1
  261. package/lib/module/ui/components/signIn/OxySignInPanel.js.map +1 -1
  262. package/lib/module/ui/components/signIn/OxySignUpPanel.js.map +1 -1
  263. package/lib/module/ui/components/signIn/ReauthStep.js.map +1 -1
  264. package/lib/module/ui/components/signIn/accountFlowParts.js.map +1 -1
  265. package/lib/module/ui/components/signIn/artwork.js.map +1 -1
  266. package/lib/module/ui/components/signIn/signInFlowStore.js.map +1 -1
  267. package/lib/module/ui/components/styles/overlay.js.map +1 -1
  268. package/lib/module/ui/components/styles/shadow.js.map +1 -1
  269. package/lib/module/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
  270. package/lib/module/ui/components/utils/hasTouchHandler.js.map +1 -1
  271. package/lib/module/ui/components/utils/roundLayoutSize.js.map +1 -1
  272. package/lib/module/ui/components/utils/splitStyles.js.map +1 -1
  273. package/lib/module/ui/constants/spacing.js.map +1 -1
  274. package/lib/module/ui/context/OxyContext.js.map +1 -1
  275. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  276. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  277. package/lib/module/ui/context/isolatedOAuthSession.js.map +1 -1
  278. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  279. package/lib/module/ui/hooks/accountDialogSnapshot.js.map +1 -1
  280. package/lib/module/ui/hooks/accountQueryPersistence.js.map +1 -1
  281. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  282. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  283. package/lib/module/ui/hooks/persistedQueryCache.js.map +1 -1
  284. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  285. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  286. package/lib/module/ui/hooks/queries/useFileQueries.js.map +1 -1
  287. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  288. package/lib/module/ui/hooks/queries/usePersonalPlans.js.map +1 -1
  289. package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  290. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  291. package/lib/module/ui/hooks/queries/userCache.js +38 -38
  292. package/lib/module/ui/hooks/queries/userCache.js.map +1 -1
  293. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  294. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  295. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  296. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  297. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  298. package/lib/module/ui/hooks/useDeviceSwitcher.js.map +1 -1
  299. package/lib/module/ui/hooks/useFileFiltering.js.map +1 -1
  300. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  301. package/lib/module/ui/hooks/useI18n.js.map +1 -1
  302. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  303. package/lib/module/ui/hooks/useReduceMotion.js.map +1 -1
  304. package/lib/module/ui/hooks/useResolvedFileUrls.js.map +1 -1
  305. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  306. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  307. package/lib/module/ui/hooks/useStorage.js.map +1 -1
  308. package/lib/module/ui/hooks/useSurfaceFrameWidth.js.map +1 -1
  309. package/lib/module/ui/icons/Ionicons.js.map +1 -1
  310. package/lib/module/ui/icons/MaterialCommunityIcons.js.map +1 -1
  311. package/lib/module/ui/icons/decorativeIconSet.js.map +1 -1
  312. package/lib/module/ui/index.js.map +1 -1
  313. package/lib/module/ui/isFrontend.js.map +1 -1
  314. package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
  315. package/lib/module/ui/navigation/routes.js.map +1 -1
  316. package/lib/module/ui/navigation/surfaces.js.map +1 -1
  317. package/lib/module/ui/oauth/applicationSessionLane.js.map +1 -1
  318. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
  319. package/lib/module/ui/oauth/browserBridge.js.map +1 -1
  320. package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -1
  321. package/lib/module/ui/oauth/nativeAuthTransport.js.map +1 -1
  322. package/lib/module/ui/oauth/oauthHandshake.js.map +1 -1
  323. package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
  324. package/lib/module/ui/oauth/oauthPopupMessages.js.map +1 -1
  325. package/lib/module/ui/runtime/createOxyRuntime.js.map +1 -1
  326. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  327. package/lib/module/ui/screens/AccountSecurityPanelScreen.js.map +1 -1
  328. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  329. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  330. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  331. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  332. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  333. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  334. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  335. package/lib/module/ui/screens/DomainsScreen.js.map +1 -1
  336. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  337. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  338. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  339. package/lib/module/ui/screens/FileManagementScreen.js +2 -5
  340. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  341. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  342. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  343. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  344. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  345. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  346. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  347. package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
  348. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  349. package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
  350. package/lib/module/ui/screens/PrivacySettingsScreen.js +3 -3
  351. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  352. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  353. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  354. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  355. package/lib/module/ui/screens/UserListScreen.js +1 -1
  356. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  357. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  358. package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  359. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
  360. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +7 -7
  361. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  362. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
  363. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  364. package/lib/module/ui/screens/fileManagement/photoGridLayout.js.map +1 -1
  365. package/lib/module/ui/screens/fileManagement/shared.js.map +1 -1
  366. package/lib/module/ui/screens/linkFormat.js.map +1 -1
  367. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  368. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  369. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  370. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  371. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  372. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  373. package/lib/module/ui/server.js.map +1 -1
  374. package/lib/module/ui/session/authStore.js.map +1 -1
  375. package/lib/module/ui/session/backgroundSession.js.map +1 -1
  376. package/lib/module/ui/session/createSessionClient.js.map +1 -1
  377. package/lib/module/ui/session/deviceCredentialTracker.js.map +1 -1
  378. package/lib/module/ui/session/identityBinding.js.map +1 -1
  379. package/lib/module/ui/session/sharedDeviceCredentialStore.js.map +1 -1
  380. package/lib/module/ui/session/tokenLossRecovery.js.map +1 -1
  381. package/lib/module/ui/session/tokenTransport.js.map +1 -1
  382. package/lib/module/ui/stores/assetStore.js.map +1 -1
  383. package/lib/module/ui/stores/followStore.js.map +1 -1
  384. package/lib/module/ui/utils/accountDeletionHandoff.js.map +1 -1
  385. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  386. package/lib/module/ui/utils/clipboard.native.js +23 -6
  387. package/lib/module/ui/utils/clipboard.native.js.map +1 -1
  388. package/lib/module/ui/utils/commonsStoreLinks.js.map +1 -1
  389. package/lib/module/ui/utils/errorHandlers.js.map +1 -1
  390. package/lib/module/ui/utils/fileManagement.js +25 -25
  391. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  392. package/lib/module/ui/utils/iconNames.js.map +1 -1
  393. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  394. package/lib/module/ui/utils/userUtils.js.map +1 -1
  395. package/lib/module/utils/hookUtils.js +2 -4
  396. package/lib/module/utils/hookUtils.js.map +1 -1
  397. package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts.map +1 -1
  398. package/lib/typescript/commonjs/assets/illustrations/HighFive.d.ts.map +1 -1
  399. package/lib/typescript/commonjs/index.d.ts +4 -4
  400. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  401. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +8 -4
  402. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -1
  403. package/lib/typescript/commonjs/ui/analytics/productAnalytics.d.ts.map +1 -1
  404. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  405. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  406. package/lib/typescript/commonjs/ui/components/BenefitList.d.ts.map +1 -1
  407. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  408. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts +1 -1
  409. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
  410. package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts +1 -1
  411. package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts.map +1 -1
  412. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  413. package/lib/typescript/commonjs/ui/components/OxyAuthPrompt.d.ts.map +1 -1
  414. package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
  415. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  416. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  417. package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
  418. package/lib/typescript/commonjs/ui/components/PeableButton.d.ts.map +1 -1
  419. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  420. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  421. package/lib/typescript/commonjs/ui/components/RequireOxyAuth.d.ts.map +1 -1
  422. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
  423. package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
  424. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts +1 -1
  425. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -1
  426. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  427. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
  428. package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
  429. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -1
  430. package/lib/typescript/commonjs/ui/components/feedback/constants.d.ts.map +1 -1
  431. package/lib/typescript/commonjs/ui/components/feedback/types.d.ts.map +1 -1
  432. package/lib/typescript/commonjs/ui/components/feedback/useFeedbackForm.d.ts.map +1 -1
  433. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  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.map +1 -1
  436. package/lib/typescript/commonjs/ui/components/followButtonAccessibility.d.ts.map +1 -1
  437. package/lib/typescript/commonjs/ui/components/followRules.d.ts.map +1 -1
  438. package/lib/typescript/commonjs/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
  439. package/lib/typescript/commonjs/ui/components/logo/LogoText.d.ts.map +1 -1
  440. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  441. package/lib/typescript/commonjs/ui/components/oauthNavigation.d.ts.map +1 -1
  442. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  443. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  444. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  445. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  446. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  447. package/lib/typescript/commonjs/ui/components/payment/constants.d.ts.map +1 -1
  448. package/lib/typescript/commonjs/ui/components/payment/paymentStyles.d.ts.map +1 -1
  449. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -6
  450. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  451. package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  452. package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
  453. package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
  454. package/lib/typescript/commonjs/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -1
  455. package/lib/typescript/commonjs/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -1
  456. package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
  457. package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
  458. package/lib/typescript/commonjs/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -1
  459. package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
  460. package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
  461. package/lib/typescript/commonjs/ui/components/signIn/ReauthStep.d.ts.map +1 -1
  462. package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
  463. package/lib/typescript/commonjs/ui/components/signIn/artwork.d.ts.map +1 -1
  464. package/lib/typescript/commonjs/ui/components/signIn/signInFlowStore.d.ts.map +1 -1
  465. package/lib/typescript/commonjs/ui/components/styles/overlay.d.ts.map +1 -1
  466. package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
  467. package/lib/typescript/commonjs/ui/components/utils/hasTouchHandler.d.ts.map +1 -1
  468. package/lib/typescript/commonjs/ui/components/utils/roundLayoutSize.d.ts.map +1 -1
  469. package/lib/typescript/commonjs/ui/components/utils/splitStyles.d.ts.map +1 -1
  470. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  471. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  472. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  473. package/lib/typescript/commonjs/ui/context/isolatedOAuthSession.d.ts.map +1 -1
  474. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  475. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  476. package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
  477. package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  478. package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
  479. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  480. package/lib/typescript/commonjs/ui/hooks/persistedQueryCache.d.ts.map +1 -1
  481. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts +2 -2
  482. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  483. package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  484. package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
  485. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  486. package/lib/typescript/commonjs/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
  487. package/lib/typescript/commonjs/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
  488. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  489. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts +5 -5
  490. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts.map +1 -1
  491. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  492. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
  493. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts.map +1 -1
  494. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  495. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  496. package/lib/typescript/commonjs/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
  497. package/lib/typescript/commonjs/ui/hooks/useFollow.d.ts.map +1 -1
  498. package/lib/typescript/commonjs/ui/hooks/useI18n.d.ts.map +1 -1
  499. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
  500. package/lib/typescript/commonjs/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
  501. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  502. package/lib/typescript/commonjs/ui/hooks/useSettingToggle.d.ts.map +1 -1
  503. package/lib/typescript/commonjs/ui/hooks/useStorage.d.ts +1 -1
  504. package/lib/typescript/commonjs/ui/hooks/useStorage.d.ts.map +1 -1
  505. package/lib/typescript/commonjs/ui/hooks/useSurfaceFrameWidth.d.ts.map +1 -1
  506. package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts.map +1 -1
  507. package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
  508. package/lib/typescript/commonjs/ui/icons/decorativeIconSet.d.ts.map +1 -1
  509. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  510. package/lib/typescript/commonjs/ui/isFrontend.d.ts.map +1 -1
  511. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  512. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts.map +1 -1
  513. package/lib/typescript/commonjs/ui/oauth/applicationSessionLane.d.ts.map +1 -1
  514. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  515. package/lib/typescript/commonjs/ui/oauth/browserBridge.d.ts.map +1 -1
  516. package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts.map +1 -1
  517. package/lib/typescript/commonjs/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
  518. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -1
  519. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
  520. package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts.map +1 -1
  521. package/lib/typescript/commonjs/ui/oauth/types.d.ts.map +1 -1
  522. package/lib/typescript/commonjs/ui/runtime/createOxyRuntime.d.ts.map +1 -1
  523. package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  524. package/lib/typescript/commonjs/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -1
  525. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  526. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  527. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  528. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  529. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  530. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  531. package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
  532. package/lib/typescript/commonjs/ui/screens/DomainsScreen.d.ts.map +1 -1
  533. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  534. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  535. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  536. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  537. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  538. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  539. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  540. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  541. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  542. package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
  543. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  544. package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
  545. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  546. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  547. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  548. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  549. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  550. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  551. package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
  552. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
  553. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  554. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
  555. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  556. package/lib/typescript/commonjs/ui/screens/fileManagement/photoGridLayout.d.ts.map +1 -1
  557. package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts.map +1 -1
  558. package/lib/typescript/commonjs/ui/screens/linkFormat.d.ts.map +1 -1
  559. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  560. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  561. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  562. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  563. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  564. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  565. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  566. package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
  567. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +1 -1
  568. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
  569. package/lib/typescript/commonjs/ui/session/deviceCredentialTracker.d.ts.map +1 -1
  570. package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -1
  571. package/lib/typescript/commonjs/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
  572. package/lib/typescript/commonjs/ui/session/tokenLossRecovery.d.ts.map +1 -1
  573. package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
  574. package/lib/typescript/commonjs/ui/stores/assetStore.d.ts.map +1 -1
  575. package/lib/typescript/commonjs/ui/stores/followStore.d.ts.map +1 -1
  576. package/lib/typescript/commonjs/ui/types/fileManagement.d.ts.map +1 -1
  577. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  578. package/lib/typescript/commonjs/ui/types/surfaceScreen.d.ts.map +1 -1
  579. package/lib/typescript/commonjs/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
  580. package/lib/typescript/commonjs/ui/utils/avatarUtils.d.ts.map +1 -1
  581. package/lib/typescript/commonjs/ui/utils/clipboard.native.d.ts +16 -5
  582. package/lib/typescript/commonjs/ui/utils/clipboard.native.d.ts.map +1 -1
  583. package/lib/typescript/commonjs/ui/utils/commonsStoreLinks.d.ts.map +1 -1
  584. package/lib/typescript/commonjs/ui/utils/errorHandlers.d.ts +1 -1
  585. package/lib/typescript/commonjs/ui/utils/errorHandlers.d.ts.map +1 -1
  586. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +4 -4
  587. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  588. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +1 -1
  589. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
  590. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
  591. package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
  592. package/lib/typescript/module/assets/icons/OxyServices.d.ts.map +1 -1
  593. package/lib/typescript/module/assets/illustrations/HighFive.d.ts.map +1 -1
  594. package/lib/typescript/module/index.d.ts +4 -4
  595. package/lib/typescript/module/index.d.ts.map +1 -1
  596. package/lib/typescript/module/notifications/deviceNotifications.d.ts +8 -4
  597. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -1
  598. package/lib/typescript/module/ui/analytics/productAnalytics.d.ts.map +1 -1
  599. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  600. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  601. package/lib/typescript/module/ui/components/BenefitList.d.ts.map +1 -1
  602. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  603. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts +1 -1
  604. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -1
  605. package/lib/typescript/module/ui/components/LanguageBridge.d.ts +1 -1
  606. package/lib/typescript/module/ui/components/LanguageBridge.d.ts.map +1 -1
  607. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  608. package/lib/typescript/module/ui/components/OxyAuthPrompt.d.ts.map +1 -1
  609. package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
  610. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  611. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  612. package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
  613. package/lib/typescript/module/ui/components/PeableButton.d.ts.map +1 -1
  614. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  615. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  616. package/lib/typescript/module/ui/components/RequireOxyAuth.d.ts.map +1 -1
  617. package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
  618. package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
  619. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts +1 -1
  620. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -1
  621. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  622. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
  623. package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
  624. package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -1
  625. package/lib/typescript/module/ui/components/feedback/constants.d.ts.map +1 -1
  626. package/lib/typescript/module/ui/components/feedback/types.d.ts.map +1 -1
  627. package/lib/typescript/module/ui/components/feedback/useFeedbackForm.d.ts.map +1 -1
  628. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  629. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  630. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  631. package/lib/typescript/module/ui/components/followButtonAccessibility.d.ts.map +1 -1
  632. package/lib/typescript/module/ui/components/followRules.d.ts.map +1 -1
  633. package/lib/typescript/module/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
  634. package/lib/typescript/module/ui/components/logo/LogoText.d.ts.map +1 -1
  635. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  636. package/lib/typescript/module/ui/components/oauthNavigation.d.ts.map +1 -1
  637. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  638. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  639. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  640. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  641. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  642. package/lib/typescript/module/ui/components/payment/constants.d.ts.map +1 -1
  643. package/lib/typescript/module/ui/components/payment/paymentStyles.d.ts.map +1 -1
  644. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -6
  645. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  646. package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  647. package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
  648. package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
  649. package/lib/typescript/module/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -1
  650. package/lib/typescript/module/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -1
  651. package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
  652. package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
  653. package/lib/typescript/module/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -1
  654. package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
  655. package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
  656. package/lib/typescript/module/ui/components/signIn/ReauthStep.d.ts.map +1 -1
  657. package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
  658. package/lib/typescript/module/ui/components/signIn/artwork.d.ts.map +1 -1
  659. package/lib/typescript/module/ui/components/signIn/signInFlowStore.d.ts.map +1 -1
  660. package/lib/typescript/module/ui/components/styles/overlay.d.ts.map +1 -1
  661. package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
  662. package/lib/typescript/module/ui/components/utils/hasTouchHandler.d.ts.map +1 -1
  663. package/lib/typescript/module/ui/components/utils/roundLayoutSize.d.ts.map +1 -1
  664. package/lib/typescript/module/ui/components/utils/splitStyles.d.ts.map +1 -1
  665. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  666. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  667. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  668. package/lib/typescript/module/ui/context/isolatedOAuthSession.d.ts.map +1 -1
  669. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  670. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  671. package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
  672. package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  673. package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
  674. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  675. package/lib/typescript/module/ui/hooks/persistedQueryCache.d.ts.map +1 -1
  676. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts +2 -2
  677. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  678. package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  679. package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
  680. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  681. package/lib/typescript/module/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
  682. package/lib/typescript/module/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
  683. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  684. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts +5 -5
  685. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts.map +1 -1
  686. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  687. package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
  688. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts.map +1 -1
  689. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  690. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  691. package/lib/typescript/module/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
  692. package/lib/typescript/module/ui/hooks/useFollow.d.ts.map +1 -1
  693. package/lib/typescript/module/ui/hooks/useI18n.d.ts.map +1 -1
  694. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
  695. package/lib/typescript/module/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
  696. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  697. package/lib/typescript/module/ui/hooks/useSettingToggle.d.ts.map +1 -1
  698. package/lib/typescript/module/ui/hooks/useStorage.d.ts +1 -1
  699. package/lib/typescript/module/ui/hooks/useStorage.d.ts.map +1 -1
  700. package/lib/typescript/module/ui/hooks/useSurfaceFrameWidth.d.ts.map +1 -1
  701. package/lib/typescript/module/ui/icons/Ionicons.d.ts.map +1 -1
  702. package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
  703. package/lib/typescript/module/ui/icons/decorativeIconSet.d.ts.map +1 -1
  704. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  705. package/lib/typescript/module/ui/isFrontend.d.ts.map +1 -1
  706. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  707. package/lib/typescript/module/ui/navigation/surfaces.d.ts.map +1 -1
  708. package/lib/typescript/module/ui/oauth/applicationSessionLane.d.ts.map +1 -1
  709. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  710. package/lib/typescript/module/ui/oauth/browserBridge.d.ts.map +1 -1
  711. package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts.map +1 -1
  712. package/lib/typescript/module/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
  713. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -1
  714. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
  715. package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts.map +1 -1
  716. package/lib/typescript/module/ui/oauth/types.d.ts.map +1 -1
  717. package/lib/typescript/module/ui/runtime/createOxyRuntime.d.ts.map +1 -1
  718. package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  719. package/lib/typescript/module/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -1
  720. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  721. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  722. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  723. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  724. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  725. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  726. package/lib/typescript/module/ui/screens/CreateAccountScreen.d.ts.map +1 -1
  727. package/lib/typescript/module/ui/screens/DomainsScreen.d.ts.map +1 -1
  728. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  729. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  730. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  731. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  732. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  733. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  734. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  735. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  736. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  737. package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
  738. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  739. package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
  740. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  741. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  742. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  743. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  744. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  745. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  746. package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
  747. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
  748. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  749. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
  750. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  751. package/lib/typescript/module/ui/screens/fileManagement/photoGridLayout.d.ts.map +1 -1
  752. package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts.map +1 -1
  753. package/lib/typescript/module/ui/screens/linkFormat.d.ts.map +1 -1
  754. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  755. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  756. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  757. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  758. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  759. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  760. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  761. package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
  762. package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +1 -1
  763. package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
  764. package/lib/typescript/module/ui/session/deviceCredentialTracker.d.ts.map +1 -1
  765. package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -1
  766. package/lib/typescript/module/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
  767. package/lib/typescript/module/ui/session/tokenLossRecovery.d.ts.map +1 -1
  768. package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
  769. package/lib/typescript/module/ui/stores/assetStore.d.ts.map +1 -1
  770. package/lib/typescript/module/ui/stores/followStore.d.ts.map +1 -1
  771. package/lib/typescript/module/ui/types/fileManagement.d.ts.map +1 -1
  772. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  773. package/lib/typescript/module/ui/types/surfaceScreen.d.ts.map +1 -1
  774. package/lib/typescript/module/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
  775. package/lib/typescript/module/ui/utils/avatarUtils.d.ts.map +1 -1
  776. package/lib/typescript/module/ui/utils/clipboard.native.d.ts +16 -5
  777. package/lib/typescript/module/ui/utils/clipboard.native.d.ts.map +1 -1
  778. package/lib/typescript/module/ui/utils/commonsStoreLinks.d.ts.map +1 -1
  779. package/lib/typescript/module/ui/utils/errorHandlers.d.ts +1 -1
  780. package/lib/typescript/module/ui/utils/errorHandlers.d.ts.map +1 -1
  781. package/lib/typescript/module/ui/utils/fileManagement.d.ts +4 -4
  782. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  783. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +1 -1
  784. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
  785. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
  786. package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
  787. package/lib/typescript/types/expo-crypto.d.ts +2 -4
  788. package/lib/typescript/types/expo-document-picker.d.ts +27 -28
  789. package/lib/typescript/types/expo-image-picker.d.ts +27 -27
  790. package/lib/typescript/types/expo-secure-store.d.ts +11 -4
  791. package/lib/typescript/types/express.d.ts +22 -7
  792. package/package.json +4 -5
  793. package/src/assets/icons/OxyServices.tsx +42 -40
  794. package/src/assets/illustrations/HighFive.tsx +58 -31
  795. package/src/index.ts +99 -86
  796. package/src/notifications/deviceNotifications.ts +9 -7
  797. package/src/types/expo-crypto.d.ts +2 -4
  798. package/src/types/expo-document-picker.d.ts +27 -28
  799. package/src/types/expo-image-picker.d.ts +27 -27
  800. package/src/types/expo-secure-store.d.ts +11 -4
  801. package/src/types/express.d.ts +22 -7
  802. package/src/ui/analytics/productAnalytics.tsx +5 -5
  803. package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +91 -29
  804. package/src/ui/boot/runProviderColdBoot.ts +12 -3
  805. package/src/ui/client.ts +31 -31
  806. package/src/ui/components/BenefitList.tsx +78 -77
  807. package/src/ui/components/BloomLocaleBridge.tsx +3 -3
  808. package/src/ui/components/FollowButton.tsx +88 -84
  809. package/src/ui/components/FollowTargetButton.tsx +15 -6
  810. package/src/ui/components/LanguageBridge.tsx +24 -19
  811. package/src/ui/components/OxyAuthChooser.tsx +17 -3
  812. package/src/ui/components/OxyAuthPrompt.tsx +79 -98
  813. package/src/ui/components/OxyConsentScreen.tsx +51 -12
  814. package/src/ui/components/OxyProvider.tsx +189 -182
  815. package/src/ui/components/OxySignInButton.tsx +415 -405
  816. package/src/ui/components/OxySignInRequestSurface.tsx +7 -1
  817. package/src/ui/components/PeableButton.tsx +57 -49
  818. package/src/ui/components/ProfileButton.tsx +158 -109
  819. package/src/ui/components/ProfileSummaryCard.tsx +64 -64
  820. package/src/ui/components/RequireOxyAuth.tsx +15 -3
  821. package/src/ui/components/SettingsIcon.tsx +24 -19
  822. package/src/ui/components/SurfaceHeaderAction.tsx +6 -1
  823. package/src/ui/components/SurfaceScreen.tsx +21 -16
  824. package/src/ui/components/__tests__/BloomLocaleBridge.test.tsx +1 -1
  825. package/src/ui/components/__tests__/LanguageBridge.test.tsx +15 -5
  826. package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +21 -11
  827. package/src/ui/components/__tests__/followButtonAccessibility.test.tsx +42 -15
  828. package/src/ui/components/__tests__/followTargetButton.test.ts +23 -20
  829. package/src/ui/components/authChooser/AccountsMenuView.tsx +70 -56
  830. package/src/ui/components/authChooser/TroubleDisclosure.tsx +6 -1
  831. package/src/ui/components/authChooser/requestSurfaces.tsx +3 -1
  832. package/src/ui/components/authChooser/types.ts +6 -1
  833. package/src/ui/components/feedback/constants.ts +36 -12
  834. package/src/ui/components/feedback/types.ts +30 -30
  835. package/src/ui/components/feedback/useFeedbackForm.ts +38 -35
  836. package/src/ui/components/fileManagement/FileDetailsModal.tsx +86 -92
  837. package/src/ui/components/fileManagement/FileViewer.tsx +362 -338
  838. package/src/ui/components/fileManagement/UploadPreview.tsx +134 -127
  839. package/src/ui/components/followButtonAccessibility.ts +6 -2
  840. package/src/ui/components/followRules.ts +6 -2
  841. package/src/ui/components/icon/FAIRWalletIcon.tsx +47 -35
  842. package/src/ui/components/logo/LogoText.tsx +6 -1
  843. package/src/ui/components/modals/DeleteAccountModal.tsx +89 -83
  844. package/src/ui/components/oauthNavigation.ts +54 -56
  845. package/src/ui/components/payment/PaymentDetailsStep.tsx +269 -201
  846. package/src/ui/components/payment/PaymentMethodStep.tsx +88 -68
  847. package/src/ui/components/payment/PaymentReviewStep.tsx +119 -102
  848. package/src/ui/components/payment/PaymentSuccessStep.tsx +48 -48
  849. package/src/ui/components/payment/PaymentSummaryStep.tsx +167 -124
  850. package/src/ui/components/payment/constants.ts +38 -23
  851. package/src/ui/components/payment/paymentStyles.ts +252 -251
  852. package/src/ui/components/payment/types.ts +24 -24
  853. package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +207 -183
  854. package/src/ui/components/photogrid/__tests__/chunkPhotos.test.ts +32 -33
  855. package/src/ui/components/signIn/InlineCommonsQr.tsx +14 -6
  856. package/src/ui/components/signIn/OxyAccountPicker.tsx +19 -4
  857. package/src/ui/components/signIn/OxyAuthScreen.tsx +21 -11
  858. package/src/ui/components/signIn/OxyAuthenticatorPanel.tsx +47 -13
  859. package/src/ui/components/signIn/OxyDeleteAccountPanel.tsx +14 -4
  860. package/src/ui/components/signIn/OxyLinkCommonsPanel.tsx +69 -15
  861. package/src/ui/components/signIn/OxyPasswordPanel.tsx +19 -4
  862. package/src/ui/components/signIn/OxySignInPanel.tsx +74 -21
  863. package/src/ui/components/signIn/OxySignUpPanel.tsx +60 -12
  864. package/src/ui/components/signIn/ReauthStep.tsx +26 -5
  865. package/src/ui/components/signIn/accountFlowParts.tsx +45 -16
  866. package/src/ui/components/signIn/artwork.ts +3 -1
  867. package/src/ui/components/signIn/signInFlowStore.ts +5 -1
  868. package/src/ui/components/styles/overlay.tsx +10 -11
  869. package/src/ui/components/styles/shadow.tsx +59 -59
  870. package/src/ui/components/surfaces/ActionSheetSurface.tsx +51 -61
  871. package/src/ui/components/utils/hasTouchHandler.tsx +3 -13
  872. package/src/ui/components/utils/roundLayoutSize.ts +1 -2
  873. package/src/ui/components/utils/splitStyles.ts +2 -5
  874. package/src/ui/constants/spacing.ts +8 -9
  875. package/src/ui/context/OxyContext.tsx +324 -140
  876. package/src/ui/context/__tests__/commitSessionFlow.test.ts +8 -3
  877. package/src/ui/context/__tests__/isolatedOAuthSession.test.ts +11 -3
  878. package/src/ui/context/commitSessionFlow.ts +15 -3
  879. package/src/ui/context/hooks/useAuthOperations.ts +54 -16
  880. package/src/ui/context/isolatedOAuthSession.ts +4 -1
  881. package/src/ui/context/oxyContextTypes.ts +26 -9
  882. package/src/ui/context/useOxyAccountGraph.ts +26 -4
  883. package/src/ui/hooks/accountDialogSnapshot.ts +3 -1
  884. package/src/ui/hooks/accountQueryPersistence.ts +16 -5
  885. package/src/ui/hooks/mutations/mutationFactory.ts +11 -6
  886. package/src/ui/hooks/mutations/useAccountMutations.ts +77 -54
  887. package/src/ui/hooks/mutations/useServicesMutations.ts +10 -11
  888. package/src/ui/hooks/persistedQueryCache.ts +10 -2
  889. package/src/ui/hooks/queries/__tests__/userCache.test.ts +72 -17
  890. package/src/ui/hooks/queries/__tests__/userCacheClear.test.ts +18 -23
  891. package/src/ui/hooks/queries/paymentTypes.ts +2 -2
  892. package/src/ui/hooks/queries/queryKeys.ts +5 -5
  893. package/src/ui/hooks/queries/useAccountQueries.ts +12 -17
  894. package/src/ui/hooks/queries/useFileQueries.ts +88 -92
  895. package/src/ui/hooks/queries/usePaymentQueries.ts +13 -26
  896. package/src/ui/hooks/queries/usePersonalPlans.ts +14 -6
  897. package/src/ui/hooks/queries/useSecurityQueries.ts +16 -29
  898. package/src/ui/hooks/queries/useServicesQueries.ts +17 -23
  899. package/src/ui/hooks/queries/userCache.ts +249 -270
  900. package/src/ui/hooks/queryClient.ts +9 -5
  901. package/src/ui/hooks/useAssets.ts +166 -160
  902. package/src/ui/hooks/useAsyncAction.ts +92 -91
  903. package/src/ui/hooks/useAuth.ts +45 -42
  904. package/src/ui/hooks/useAvatarPicker.ts +2 -5
  905. package/src/ui/hooks/useDeviceManagement.ts +0 -2
  906. package/src/ui/hooks/useDeviceSwitcher.ts +73 -68
  907. package/src/ui/hooks/useFileFiltering.ts +2 -2
  908. package/src/ui/hooks/useFollow.ts +139 -67
  909. package/src/ui/hooks/useFollowTarget.ts +11 -11
  910. package/src/ui/hooks/useI18n.ts +7 -2
  911. package/src/ui/hooks/useProfileEditing.ts +167 -155
  912. package/src/ui/hooks/useQueryClient.ts +2 -3
  913. package/src/ui/hooks/useReduceMotion.ts +21 -21
  914. package/src/ui/hooks/useResolvedFileUrls.ts +5 -1
  915. package/src/ui/hooks/useSessionManagement.ts +3 -1
  916. package/src/ui/hooks/useSettingToggle.ts +122 -114
  917. package/src/ui/hooks/useStorage.ts +1 -4
  918. package/src/ui/hooks/useSurfaceFrameWidth.ts +3 -1
  919. package/src/ui/icons/Ionicons.ts +1 -5
  920. package/src/ui/icons/MaterialCommunityIcons.ts +1 -5
  921. package/src/ui/icons/__tests__/decorativeIconSet.test.tsx +3 -1
  922. package/src/ui/icons/decorativeIconSet.ts +13 -2
  923. package/src/ui/index.ts +4 -4
  924. package/src/ui/isFrontend.ts +3 -2
  925. package/src/ui/navigation/__tests__/getSurfaceConfig.test.ts +83 -83
  926. package/src/ui/navigation/__tests__/surfaceNavStack.test.ts +8 -2
  927. package/src/ui/navigation/bottomSheetManager.ts +1 -1
  928. package/src/ui/navigation/routes.ts +90 -88
  929. package/src/ui/navigation/surfaces.ts +7 -6
  930. package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +18 -11
  931. package/src/ui/oauth/__tests__/browserBridge.test.ts +108 -21
  932. package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +9 -6
  933. package/src/ui/oauth/__tests__/explicitOAuthConsent.test.ts +222 -241
  934. package/src/ui/oauth/__tests__/nativeAuthTransport.test.ts +118 -35
  935. package/src/ui/oauth/__tests__/oauthBearerCommit.http.test.ts +60 -18
  936. package/src/ui/oauth/__tests__/oauthPopup.test.ts +2 -7
  937. package/src/ui/oauth/__tests__/oauthPopupMessages.test.ts +9 -7
  938. package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +4 -5
  939. package/src/ui/oauth/applicationSessionLane.ts +12 -3
  940. package/src/ui/oauth/browserAuthTransport.ts +15 -7
  941. package/src/ui/oauth/browserBridge.ts +22 -5
  942. package/src/ui/oauth/completeOAuthCode.ts +9 -6
  943. package/src/ui/oauth/nativeAuthTransport.ts +73 -20
  944. package/src/ui/oauth/oauthHandshake.ts +6 -1
  945. package/src/ui/oauth/oauthPopup.ts +6 -4
  946. package/src/ui/oauth/oauthPopupMessages.ts +3 -4
  947. package/src/ui/oauth/types.ts +1 -3
  948. package/src/ui/runtime/createOxyRuntime.ts +21 -4
  949. package/src/ui/screens/AccountMembersScreen.tsx +274 -204
  950. package/src/ui/screens/AccountSecurityPanelScreen.tsx +3 -1
  951. package/src/ui/screens/AccountSettingsScreen.tsx +133 -113
  952. package/src/ui/screens/AccountVerificationScreen.tsx +176 -161
  953. package/src/ui/screens/AppInfoScreen.tsx +360 -304
  954. package/src/ui/screens/AvatarCropScreen.tsx +977 -988
  955. package/src/ui/screens/ChangeAvatarScreen.tsx +257 -253
  956. package/src/ui/screens/ConnectedAppsScreen.tsx +117 -130
  957. package/src/ui/screens/CreateAccountScreen.tsx +173 -129
  958. package/src/ui/screens/DomainsScreen.tsx +157 -140
  959. package/src/ui/screens/EditProfileFieldScreen.tsx +693 -663
  960. package/src/ui/screens/EditProfileScreen.tsx +106 -100
  961. package/src/ui/screens/FileManagementScreen.tsx +1505 -1162
  962. package/src/ui/screens/HelpSupportScreen.tsx +88 -75
  963. package/src/ui/screens/HistoryViewScreen.tsx +143 -102
  964. package/src/ui/screens/LanguageSelectorScreen.tsx +206 -199
  965. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +92 -110
  966. package/src/ui/screens/LegalDocumentsScreen.tsx +134 -193
  967. package/src/ui/screens/ManageAccountScreen.tsx +649 -871
  968. package/src/ui/screens/NotificationsScreen.tsx +111 -143
  969. package/src/ui/screens/PaymentGatewayScreen.tsx +229 -244
  970. package/src/ui/screens/PreferencesScreen.tsx +153 -196
  971. package/src/ui/screens/PrivacySettingsScreen.tsx +509 -351
  972. package/src/ui/screens/ProfileScreen.tsx +416 -319
  973. package/src/ui/screens/SearchSettingsScreen.tsx +100 -98
  974. package/src/ui/screens/UserLinksScreen.tsx +48 -43
  975. package/src/ui/screens/UserListScreen.tsx +53 -30
  976. package/src/ui/screens/WelcomeNewUserScreen.tsx +430 -334
  977. package/src/ui/screens/__tests__/linkFormat.test.ts +58 -62
  978. package/src/ui/screens/__tests__/photoGridLayout.test.ts +43 -47
  979. package/src/ui/screens/fileManagement/FileLibraryError.tsx +33 -27
  980. package/src/ui/screens/fileManagement/FileListSection.tsx +96 -87
  981. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +508 -475
  982. package/src/ui/screens/fileManagement/UploadBar.tsx +26 -16
  983. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +514 -490
  984. package/src/ui/screens/fileManagement/photoGridLayout.ts +13 -13
  985. package/src/ui/screens/fileManagement/shared.ts +40 -38
  986. package/src/ui/screens/linkFormat.ts +14 -14
  987. package/src/ui/screens/trust/TrustAboutScreen.tsx +53 -51
  988. package/src/ui/screens/trust/TrustCenterScreen.tsx +156 -214
  989. package/src/ui/screens/trust/TrustFAQScreen.tsx +60 -67
  990. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +183 -183
  991. package/src/ui/screens/trust/TrustRewardsScreen.tsx +495 -494
  992. package/src/ui/screens/trust/TrustRulesScreen.tsx +84 -85
  993. package/src/ui/server.ts +12 -15
  994. package/src/ui/session/__tests__/authStore.test.ts +6 -1
  995. package/src/ui/session/__tests__/createSessionClient.test.ts +22 -8
  996. package/src/ui/session/__tests__/sharedDeviceCredentialStore.test.ts +24 -6
  997. package/src/ui/session/__tests__/tokenLossRecovery.test.ts +3 -1
  998. package/src/ui/session/__tests__/tokenTransport.test.ts +9 -2
  999. package/src/ui/session/authStore.ts +7 -1
  1000. package/src/ui/session/backgroundSession.ts +4 -3
  1001. package/src/ui/session/createSessionClient.ts +17 -5
  1002. package/src/ui/session/deviceCredentialTracker.ts +12 -6
  1003. package/src/ui/session/identityBinding.ts +6 -1
  1004. package/src/ui/session/sharedDeviceCredentialStore.ts +15 -4
  1005. package/src/ui/session/tokenLossRecovery.ts +24 -10
  1006. package/src/ui/session/tokenTransport.ts +5 -1
  1007. package/src/ui/stores/__tests__/followStore.test.ts +20 -7
  1008. package/src/ui/stores/assetStore.ts +209 -207
  1009. package/src/ui/stores/followStore.ts +80 -39
  1010. package/src/ui/stores/followTargetStore.ts +1 -1
  1011. package/src/ui/types/fileManagement.ts +48 -49
  1012. package/src/ui/types/navigation.ts +168 -168
  1013. package/src/ui/types/surfaceScreen.ts +4 -1
  1014. package/src/ui/utils/__tests__/deviceSessionTitle.test.ts +4 -2
  1015. package/src/ui/utils/accountDeletionHandoff.ts +14 -3
  1016. package/src/ui/utils/avatarUtils.ts +7 -6
  1017. package/src/ui/utils/clipboard.native.ts +23 -6
  1018. package/src/ui/utils/commonsStoreLinks.ts +2 -1
  1019. package/src/ui/utils/errorHandlers.ts +7 -12
  1020. package/src/ui/utils/fileManagement.ts +92 -103
  1021. package/src/ui/utils/iconNames.ts +60 -60
  1022. package/src/ui/utils/sessionHelpers.ts +1 -6
  1023. package/src/ui/utils/storageHelpers.ts +0 -1
  1024. package/src/ui/utils/userUtils.ts +2 -6
  1025. package/src/utils/hookUtils.ts +77 -65
@@ -6,36 +6,36 @@ import type { AssetUploadInput, FileMetadata } from '@oxy.so/core';
6
6
  import type { useUploadFile } from '../../../hooks/mutations/useAccountMutations';
7
7
  import { queryKeys } from '../../../hooks/queries/queryKeys';
8
8
  import {
9
- prependFileToCache,
10
- removeFileFromCache,
11
- replaceFileInCache,
9
+ prependFileToCache,
10
+ removeFileFromCache,
11
+ replaceFileInCache,
12
12
  } from '../../../hooks/queries/useFileQueries';
13
13
  import { convertDocumentPickerAssetToFile, formatFileSize } from '../../../utils/fileManagement';
14
14
  import {
15
- createPendingUploadFile,
16
- type PendingUploadFile,
17
- type UploadCandidate,
18
- candidateName,
19
- candidateSize,
20
- candidateType,
21
- candidateUri,
22
- getErrorMessage,
23
- loadDocumentPicker,
15
+ createPendingUploadFile,
16
+ type PendingUploadFile,
17
+ type UploadCandidate,
18
+ candidateName,
19
+ candidateSize,
20
+ candidateType,
21
+ candidateUri,
22
+ getErrorMessage,
23
+ loadDocumentPicker,
24
24
  } from '../shared';
25
25
 
26
26
  /** Aggregate progress across a multi-file upload. */
27
27
  export interface FileUploadAggregateProgress {
28
- current: number;
29
- total: number;
28
+ current: number;
29
+ total: number;
30
30
  }
31
31
 
32
32
  /** Minimum time the "Uploading…" indicator stays visible (anti-flash). */
33
33
  const MIN_BANNER_MS = 600;
34
34
 
35
35
  function revokePreviewUrl(preview: string | undefined): void {
36
- if (preview?.startsWith('blob:')) {
37
- URL.revokeObjectURL(preview);
38
- }
36
+ if (preview?.startsWith('blob:')) {
37
+ URL.revokeObjectURL(preview);
38
+ }
39
39
  }
40
40
 
41
41
  /**
@@ -45,43 +45,43 @@ function revokePreviewUrl(preview: string | undefined): void {
45
45
  * bare guard would leave an empty tile). See `useResolvedFileUrls`.
46
46
  */
47
47
  type OptimisticFileMetadata = NonNullable<FileMetadata['metadata']> & {
48
- uploading?: boolean;
49
- localPreviewUri?: string;
48
+ uploading?: boolean;
49
+ localPreviewUri?: string;
50
50
  };
51
51
 
52
52
  /** Dependencies threaded into the upload-state hook from the orchestrator. */
53
53
  export interface UseFileUploadStateParams {
54
- targetUserId?: string;
55
- uploadFileMutation: ReturnType<typeof useUploadFile>;
56
- defaultVisibility: 'private' | 'public' | 'unlisted';
57
- selectMode: boolean;
58
- multiSelect: boolean;
59
- afterSelect: 'close' | 'back' | 'none';
60
- onSelect?: (file: FileMetadata) => void;
61
- /** Forward-navigation picker: see {@link FileManagementScreenProps.onPicked}. */
62
- onPicked?: (file: FileMetadata) => void;
63
- goBack?: () => void;
64
- onClose?: () => void;
65
- /** When true, the document picker and pre-upload validation accept images only. */
66
- imagesOnly?: boolean;
67
- selectedIds: Set<string>;
68
- setSelectedIds: React.Dispatch<React.SetStateAction<Set<string>>>;
69
- t: (key: string, vars?: Record<string, string | number>) => string;
54
+ targetUserId?: string;
55
+ uploadFileMutation: ReturnType<typeof useUploadFile>;
56
+ defaultVisibility: 'private' | 'public' | 'unlisted';
57
+ selectMode: boolean;
58
+ multiSelect: boolean;
59
+ afterSelect: 'close' | 'back' | 'none';
60
+ onSelect?: (file: FileMetadata) => void;
61
+ /** Forward-navigation picker: see {@link FileManagementScreenProps.onPicked}. */
62
+ onPicked?: (file: FileMetadata) => void;
63
+ goBack?: () => void;
64
+ onClose?: () => void;
65
+ /** When true, the document picker and pre-upload validation accept images only. */
66
+ imagesOnly?: boolean;
67
+ selectedIds: Set<string>;
68
+ setSelectedIds: React.Dispatch<React.SetStateAction<Set<string>>>;
69
+ t: (key: string, vars?: Record<string, string | number>) => string;
70
70
  }
71
71
 
72
72
  /** Public surface returned to the orchestrator. */
73
73
  export interface UseFileUploadStateResult {
74
- isPickingDocument: boolean;
75
- pendingFiles: PendingUploadFile[];
76
- showUploadPreview: boolean;
77
- /** Whether an upload is in flight (drives the "Uploading…" banner). */
78
- uploading: boolean;
79
- /** Aggregate progress across the current upload, or null. */
80
- uploadProgress: FileUploadAggregateProgress | null;
81
- handleFileUpload: () => Promise<void>;
82
- handleConfirmUpload: () => Promise<void>;
83
- handleCancelUpload: () => void;
84
- removePendingFile: (id: string) => void;
74
+ isPickingDocument: boolean;
75
+ pendingFiles: PendingUploadFile[];
76
+ showUploadPreview: boolean;
77
+ /** Whether an upload is in flight (drives the "Uploading…" banner). */
78
+ uploading: boolean;
79
+ /** Aggregate progress across the current upload, or null. */
80
+ uploadProgress: FileUploadAggregateProgress | null;
81
+ handleFileUpload: () => Promise<void>;
82
+ handleConfirmUpload: () => Promise<void>;
83
+ handleCancelUpload: () => void;
84
+ removePendingFile: (id: string) => void;
85
85
  }
86
86
 
87
87
  /**
@@ -91,475 +91,499 @@ export interface UseFileUploadStateResult {
91
91
  * consumes the returned state/handlers.
92
92
  */
93
93
  export const useFileUploadState = ({
94
- targetUserId,
95
- uploadFileMutation,
96
- defaultVisibility,
97
- selectMode,
98
- multiSelect,
99
- afterSelect,
100
- onSelect,
101
- onPicked,
102
- goBack,
103
- onClose,
104
- imagesOnly = false,
105
- selectedIds,
106
- setSelectedIds,
107
- t,
94
+ targetUserId,
95
+ uploadFileMutation,
96
+ defaultVisibility,
97
+ selectMode,
98
+ multiSelect,
99
+ afterSelect,
100
+ onSelect,
101
+ onPicked,
102
+ goBack,
103
+ onClose,
104
+ imagesOnly = false,
105
+ selectedIds,
106
+ setSelectedIds,
107
+ t,
108
108
  }: UseFileUploadStateParams): UseFileUploadStateResult => {
109
- const [isPickingDocument, setIsPickingDocument] = useState(false);
110
- const [pendingFiles, setPendingFiles] = useState<PendingUploadFile[]>([]);
111
- const [showUploadPreview, setShowUploadPreview] = useState(false);
112
- const [uploading, setUploading] = useState(false);
113
- const [uploadProgress, setUploadProgress] = useState<FileUploadAggregateProgress | null>(null);
114
-
115
- const queryClient = useQueryClient();
116
- const uploadStartRef = useRef<number | null>(null);
117
- const postSelectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
118
- const endUploadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
119
- const isActiveRef = useRef(true);
120
-
121
- const clearPostSelectTimer = useCallback(() => {
122
- if (postSelectTimerRef.current) {
123
- clearTimeout(postSelectTimerRef.current);
124
- postSelectTimerRef.current = null;
125
- }
126
- }, []);
109
+ const [isPickingDocument, setIsPickingDocument] = useState(false);
110
+ const [pendingFiles, setPendingFiles] = useState<PendingUploadFile[]>([]);
111
+ const [showUploadPreview, setShowUploadPreview] = useState(false);
112
+ const [uploading, setUploading] = useState(false);
113
+ const [uploadProgress, setUploadProgress] = useState<FileUploadAggregateProgress | null>(null);
114
+
115
+ const queryClient = useQueryClient();
116
+ const uploadStartRef = useRef<number | null>(null);
117
+ const postSelectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
118
+ const endUploadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
119
+ const isActiveRef = useRef(true);
120
+
121
+ const clearPostSelectTimer = useCallback(() => {
122
+ if (postSelectTimerRef.current) {
123
+ clearTimeout(postSelectTimerRef.current);
124
+ postSelectTimerRef.current = null;
125
+ }
126
+ }, []);
127
127
 
128
- const clearEndUploadTimer = useCallback(() => {
129
- if (endUploadTimerRef.current) {
130
- clearTimeout(endUploadTimerRef.current);
131
- endUploadTimerRef.current = null;
132
- }
133
- }, []);
134
-
135
- useEffect(() => {
136
- isActiveRef.current = true;
137
- return () => {
138
- isActiveRef.current = false;
139
- clearPostSelectTimer();
140
- clearEndUploadTimer();
141
- };
142
- }, [clearPostSelectTimer, clearEndUploadTimer]);
143
-
144
- const endUpload = useCallback(() => {
145
- const started = uploadStartRef.current;
146
- const elapsed = started ? Date.now() - started : MIN_BANNER_MS;
147
- const remaining = elapsed < MIN_BANNER_MS ? MIN_BANNER_MS - elapsed : 0;
148
- clearEndUploadTimer();
149
- endUploadTimerRef.current = setTimeout(() => {
150
- endUploadTimerRef.current = null;
151
- if (!isActiveRef.current) return;
152
- setUploading(false);
153
- uploadStartRef.current = null;
154
- }, remaining);
155
- }, [clearEndUploadTimer]);
156
-
157
- const processFileUploads = async (selectedFiles: UploadCandidate[]): Promise<FileMetadata[]> => {
158
- if (selectedFiles.length === 0) return [];
159
- if (!targetUserId) return []; // Guard clause to ensure userId is defined
160
- const uploadedFiles: FileMetadata[] = [];
161
- try {
162
- setUploadProgress({ current: 0, total: selectedFiles.length });
163
- const maxSize = 50 * 1024 * 1024; // 50MB
164
- const oversizedFiles = selectedFiles.filter(file => candidateSize(file) > maxSize);
165
- if (oversizedFiles.length > 0) {
166
- const fileList = oversizedFiles.map(f => candidateName(f, 'file')).join(', ');
167
- toast.error(t('fileManagement.toasts.filesTooLarge', { files: fileList }));
168
- return [];
169
- }
170
- let successCount = 0;
171
- let failureCount = 0;
172
- const errors: string[] = [];
173
- for (let i = 0; i < selectedFiles.length; i++) {
174
- setUploadProgress({ current: i + 1, total: selectedFiles.length });
175
- const raw = selectedFiles[i];
176
- const fileName = candidateName(raw, `file-${i + 1}`);
177
- const fileSize = candidateSize(raw);
178
- const fileType = candidateType(raw);
179
- const optimisticId = `temp-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 11)}`; // Unique ID per file
180
-
181
- try {
182
- // Validate file before upload
183
- if (!raw || !fileName || fileSize <= 0) {
184
- failureCount++;
185
- errors.push(`${fileName}: Invalid file (missing name or size)`);
186
- continue;
187
- }
188
-
189
- // Preserve the locally-picked uri so the optimistic tile
190
- // shows the real image (not an empty placeholder) while the
191
- // upload is in flight. Never an asset URL — the id is a
192
- // client-minted `temp-…`.
193
- const previewUri = candidateUri(raw);
194
- const optimisticMetadata: OptimisticFileMetadata = {
195
- uploading: true,
196
- ...(previewUri ? { localPreviewUri: previewUri } : {}),
197
- };
198
- const optimisticFile: FileMetadata = {
199
- id: optimisticId,
200
- filename: fileName,
201
- contentType: fileType,
202
- length: fileSize,
203
- chunkSize: 0,
204
- uploadDate: new Date().toISOString(),
205
- metadata: optimisticMetadata,
206
- variants: [],
207
- };
208
- prependFileToCache(queryClient, targetUserId, optimisticFile);
209
-
210
- // Use the mutation hook with authentication handling
211
- const result = await uploadFileMutation.mutateAsync({
212
- file: raw as AssetUploadInput,
213
- visibility: defaultVisibility,
214
- });
215
-
216
- // Attempt to refresh file list incrementally – fetch single file metadata if API allows
217
- const f = result?.file ?? result?.files?.[0];
218
- if (f) {
219
- const merged: FileMetadata = {
220
- id: f.id,
221
- filename: f.originalName || f.sha256 || fileName,
222
- contentType: f.mime || fileType,
223
- length: f.size || fileSize,
224
- chunkSize: 0,
225
- uploadDate: f.createdAt || new Date().toISOString(),
226
- metadata: f.metadata || {},
227
- variants: f.variants || [],
228
- };
229
- // Swap the optimistic temp entry for the persisted record.
230
- replaceFileInCache(queryClient, targetUserId, optimisticId, merged);
231
- uploadedFiles.push(merged);
232
- successCount++;
233
- } else {
234
- // Upload succeeded but the API returned no file payload,
235
- // so we cannot build a real entry. Drop the optimistic
236
- // placeholder instead of stranding a `temp-…` id (which
237
- // would leak into asset URLs); the reconcile invalidation
238
- // below re-fetches the persisted record.
239
- removeFileFromCache(queryClient, targetUserId, optimisticId);
240
- // Still count as success if upload didn't throw
241
- successCount++;
242
- }
243
- } catch (error: unknown) {
244
- failureCount++;
245
- const errorMessage = getErrorMessage(error) || 'Upload failed';
246
- errors.push(`${fileName}: ${errorMessage}`);
247
- // Remove optimistic file on error (use the same optimisticId from above)
248
- removeFileFromCache(queryClient, targetUserId, optimisticId);
249
- }
250
- }
128
+ const clearEndUploadTimer = useCallback(() => {
129
+ if (endUploadTimerRef.current) {
130
+ clearTimeout(endUploadTimerRef.current);
131
+ endUploadTimerRef.current = null;
132
+ }
133
+ }, []);
134
+
135
+ useEffect(() => {
136
+ isActiveRef.current = true;
137
+ return () => {
138
+ isActiveRef.current = false;
139
+ clearPostSelectTimer();
140
+ clearEndUploadTimer();
141
+ };
142
+ }, [clearPostSelectTimer, clearEndUploadTimer]);
143
+
144
+ const endUpload = useCallback(() => {
145
+ const started = uploadStartRef.current;
146
+ const elapsed = started ? Date.now() - started : MIN_BANNER_MS;
147
+ const remaining = elapsed < MIN_BANNER_MS ? MIN_BANNER_MS - elapsed : 0;
148
+ clearEndUploadTimer();
149
+ endUploadTimerRef.current = setTimeout(() => {
150
+ endUploadTimerRef.current = null;
151
+ if (!isActiveRef.current) return;
152
+ setUploading(false);
153
+ uploadStartRef.current = null;
154
+ }, remaining);
155
+ }, [clearEndUploadTimer]);
156
+
157
+ const processFileUploads = async (selectedFiles: UploadCandidate[]): Promise<FileMetadata[]> => {
158
+ if (selectedFiles.length === 0) return [];
159
+ if (!targetUserId) return []; // Guard clause to ensure userId is defined
160
+ const uploadedFiles: FileMetadata[] = [];
161
+ try {
162
+ setUploadProgress({ current: 0, total: selectedFiles.length });
163
+ const maxSize = 50 * 1024 * 1024; // 50MB
164
+ const oversizedFiles = selectedFiles.filter((file) => candidateSize(file) > maxSize);
165
+ if (oversizedFiles.length > 0) {
166
+ const fileList = oversizedFiles.map((f) => candidateName(f, 'file')).join(', ');
167
+ toast.error(t('fileManagement.toasts.filesTooLarge', { files: fileList }));
168
+ return [];
169
+ }
170
+ let successCount = 0;
171
+ let failureCount = 0;
172
+ const errors: string[] = [];
173
+ for (let i = 0; i < selectedFiles.length; i++) {
174
+ setUploadProgress({ current: i + 1, total: selectedFiles.length });
175
+ const raw = selectedFiles[i];
176
+ const fileName = candidateName(raw, `file-${i + 1}`);
177
+ const fileSize = candidateSize(raw);
178
+ const fileType = candidateType(raw);
179
+ const optimisticId = `temp-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 11)}`; // Unique ID per file
251
180
 
252
- // Show success/error messages
253
- if (successCount > 0) {
254
- toast.success(t('fileManagement.toasts.uploadSuccess', { count: successCount }));
255
- }
256
- if (failureCount > 0) {
257
- // Show detailed error message with first few errors
258
- const errorDetails = errors.length > 0
259
- ? `\n${errors.slice(0, 3).join('\n')}${errors.length > 3 ? `\n...and ${errors.length - 3} more` : ''}`
260
- : '';
261
- toast.error(`${t('fileManagement.toasts.uploadFailed', { count: failureCount })}${errorDetails}`);
262
- }
263
- // Reconcile against the server (picks up generated variants / metadata)
264
- // — replaces the old silent-reload timer.
265
- if (successCount > 0) {
266
- queryClient.invalidateQueries({ queryKey: queryKeys.files.list(targetUserId) });
267
- }
181
+ try {
182
+ // Validate file before upload
183
+ if (!raw || !fileName || fileSize <= 0) {
184
+ failureCount++;
185
+ errors.push(`${fileName}: Invalid file (missing name or size)`);
186
+ continue;
187
+ }
188
+
189
+ // Preserve the locally-picked uri so the optimistic tile
190
+ // shows the real image (not an empty placeholder) while the
191
+ // upload is in flight. Never an asset URL — the id is a
192
+ // client-minted `temp-…`.
193
+ const previewUri = candidateUri(raw);
194
+ const optimisticMetadata: OptimisticFileMetadata = {
195
+ uploading: true,
196
+ ...(previewUri ? { localPreviewUri: previewUri } : {}),
197
+ };
198
+ const optimisticFile: FileMetadata = {
199
+ id: optimisticId,
200
+ filename: fileName,
201
+ contentType: fileType,
202
+ length: fileSize,
203
+ chunkSize: 0,
204
+ uploadDate: new Date().toISOString(),
205
+ metadata: optimisticMetadata,
206
+ variants: [],
207
+ };
208
+ prependFileToCache(queryClient, targetUserId, optimisticFile);
209
+
210
+ // Use the mutation hook with authentication handling
211
+ const result = await uploadFileMutation.mutateAsync({
212
+ file: raw as AssetUploadInput,
213
+ visibility: defaultVisibility,
214
+ });
215
+
216
+ // Attempt to refresh file list incrementally – fetch single file metadata if API allows
217
+ const f = result?.file ?? result?.files?.[0];
218
+ if (f) {
219
+ const merged: FileMetadata = {
220
+ id: f.id,
221
+ filename: f.originalName || f.sha256 || fileName,
222
+ contentType: f.mime || fileType,
223
+ length: f.size || fileSize,
224
+ chunkSize: 0,
225
+ uploadDate: f.createdAt || new Date().toISOString(),
226
+ metadata: f.metadata || {},
227
+ variants: f.variants || [],
228
+ };
229
+ // Swap the optimistic temp entry for the persisted record.
230
+ replaceFileInCache(queryClient, targetUserId, optimisticId, merged);
231
+ uploadedFiles.push(merged);
232
+ successCount++;
233
+ } else {
234
+ // Upload succeeded but the API returned no file payload,
235
+ // so we cannot build a real entry. Drop the optimistic
236
+ // placeholder instead of stranding a `temp-…` id (which
237
+ // would leak into asset URLs); the reconcile invalidation
238
+ // below re-fetches the persisted record.
239
+ removeFileFromCache(queryClient, targetUserId, optimisticId);
240
+ // Still count as success if upload didn't throw
241
+ successCount++;
242
+ }
268
243
  } catch (error: unknown) {
269
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
270
- } finally {
271
- setUploadProgress(null);
244
+ failureCount++;
245
+ const errorMessage = getErrorMessage(error) || 'Upload failed';
246
+ errors.push(`${fileName}: ${errorMessage}`);
247
+ // Remove optimistic file on error (use the same optimisticId from above)
248
+ removeFileFromCache(queryClient, targetUserId, optimisticId);
272
249
  }
273
- return uploadedFiles;
274
- };
275
-
276
- const handleFileSelection = useCallback(async (selectedFiles: UploadCandidate[]) => {
277
- const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
278
- const processedFiles: PendingUploadFile[] = [];
279
-
280
- for (const file of selectedFiles) {
281
- // Validate file has required properties
282
- if (!file) {
283
- toast.error(t('fileManagement.toasts.invalidFileMissing'));
284
- continue;
285
- }
286
-
287
- const name = candidateName(file, '');
288
- if (!name) {
289
- toast.error(t('fileManagement.toasts.invalidFileName'));
290
- continue;
291
- }
292
-
293
- const size = (file as { size?: number }).size;
294
- if (size === undefined || size === null || Number.isNaN(size)) {
295
- toast.error(t('fileManagement.toasts.invalidFileSize', { name }));
296
- continue;
297
- }
298
-
299
- if (size <= 0) {
300
- toast.error(t('fileManagement.toasts.fileEmpty', { name }));
301
- continue;
302
- }
303
-
304
- // Validate file size
305
- if (size > MAX_FILE_SIZE) {
306
- toast.error(t('fileManagement.toasts.fileTooLarge', { name, maxSize: formatFileSize(MAX_FILE_SIZE) }));
307
- continue;
308
- }
309
-
310
- const fileType = candidateType(file);
311
-
312
- if (imagesOnly && !fileType.startsWith('image/')) {
313
- toast.error(t('fileManagement.toasts.imagesOnlyRequired'));
314
- continue;
315
- }
316
-
317
- // Generate preview for images - unified approach
318
- let preview: string | undefined;
319
- if (fileType.startsWith('image/')) {
320
- // Try to use file URI from expo-document-picker if available (works on all platforms)
321
- const fileUri = candidateUri(file);
322
- if (fileUri &&
323
- (fileUri.startsWith('file://') || fileUri.startsWith('content://') ||
324
- fileUri.startsWith('http://') || fileUri.startsWith('https://') ||
325
- fileUri.startsWith('blob:'))) {
326
- preview = fileUri;
327
- } else {
328
- // Fallback: create blob URL if possible (works on web only)
329
- try {
330
- if ((typeof File !== 'undefined' && file instanceof File) ||
331
- (typeof Blob !== 'undefined' && file instanceof Blob)) {
332
- preview = URL.createObjectURL(file as Blob);
333
- }
334
- } catch {
335
- // Preview is optional — continue without it.
336
- }
337
- }
338
- }
339
-
340
- processedFiles.push(createPendingUploadFile(file, preview, size, name, fileType));
250
+ }
251
+
252
+ // Show success/error messages
253
+ if (successCount > 0) {
254
+ toast.success(t('fileManagement.toasts.uploadSuccess', { count: successCount }));
255
+ }
256
+ if (failureCount > 0) {
257
+ // Show detailed error message with first few errors
258
+ const errorDetails =
259
+ errors.length > 0
260
+ ? `\n${errors.slice(0, 3).join('\n')}${errors.length > 3 ? `\n...and ${errors.length - 3} more` : ''}`
261
+ : '';
262
+ toast.error(
263
+ `${t('fileManagement.toasts.uploadFailed', { count: failureCount })}${errorDetails}`,
264
+ );
265
+ }
266
+ // Reconcile against the server (picks up generated variants / metadata)
267
+ // — replaces the old silent-reload timer.
268
+ if (successCount > 0) {
269
+ queryClient.invalidateQueries({ queryKey: queryKeys.files.list(targetUserId) });
270
+ }
271
+ } catch (error: unknown) {
272
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
273
+ } finally {
274
+ setUploadProgress(null);
275
+ }
276
+ return uploadedFiles;
277
+ };
278
+
279
+ const handleFileSelection = useCallback(
280
+ async (selectedFiles: UploadCandidate[]) => {
281
+ const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
282
+ const processedFiles: PendingUploadFile[] = [];
283
+
284
+ for (const file of selectedFiles) {
285
+ // Validate file has required properties
286
+ if (!file) {
287
+ toast.error(t('fileManagement.toasts.invalidFileMissing'));
288
+ continue;
341
289
  }
342
290
 
343
- if (processedFiles.length === 0) {
344
- toast.error(t('fileManagement.toasts.noValidFiles'));
345
- return;
291
+ const name = candidateName(file, '');
292
+ if (!name) {
293
+ toast.error(t('fileManagement.toasts.invalidFileName'));
294
+ continue;
346
295
  }
347
296
 
348
- // Show preview modal for user to review files before upload
349
- setPendingFiles(processedFiles);
350
- setShowUploadPreview(true);
351
- }, [imagesOnly, t]);
352
-
353
- const handleConfirmUpload = async () => {
354
- if (pendingFiles.length === 0) return;
355
-
356
- setShowUploadPreview(false);
357
- uploadStartRef.current = Date.now();
358
- setUploading(true);
359
- setUploadProgress(null);
360
-
361
- try {
362
- const filesToUpload = pendingFiles.map(pf => pf.file);
363
- setUploadProgress({ current: 0, total: filesToUpload.length });
364
- const uploadedFiles = await processFileUploads(filesToUpload);
297
+ const size = (file as { size?: number }).size;
298
+ if (size === undefined || size === null || Number.isNaN(size)) {
299
+ toast.error(t('fileManagement.toasts.invalidFileSize', { name }));
300
+ continue;
301
+ }
365
302
 
366
- // Cleanup preview URLs
367
- for (const pf of pendingFiles) {
368
- revokePreviewUrl(pf.preview);
369
- }
370
- setPendingFiles([]);
371
-
372
- // If in selectMode, automatically select the uploaded file(s)
373
- if (selectMode && uploadedFiles.length > 0) {
374
- // Defer one tick so the query cache has settled before selecting.
375
- clearPostSelectTimer();
376
- postSelectTimerRef.current = setTimeout(() => {
377
- postSelectTimerRef.current = null;
378
- if (!isActiveRef.current) return;
379
-
380
- const fileToSelect = uploadedFiles[0];
381
- if (!multiSelect && fileToSelect) {
382
- if (onPicked) {
383
- // Forward-navigation picker (avatar flow): hand the
384
- // freshly-uploaded file onward (to the cropper). No
385
- // dismiss/close — the picker frame stays below.
386
- onPicked(fileToSelect);
387
- } else {
388
- // Single select mode - directly call onSelect callback
389
- onSelect?.(fileToSelect);
390
- if (afterSelect === 'back') {
391
- goBack?.();
392
- } else if (afterSelect === 'close') {
393
- onClose?.();
394
- }
395
- }
396
- } else if (multiSelect) {
397
- // Multi-select mode - add all uploaded files to selection
398
- for (const file of uploadedFiles) {
399
- if (!selectedIds.has(file.id)) {
400
- setSelectedIds(prev => new Set(prev).add(file.id));
401
- }
402
- }
403
- }
404
- }, 500);
405
- }
303
+ if (size <= 0) {
304
+ toast.error(t('fileManagement.toasts.fileEmpty', { name }));
305
+ continue;
306
+ }
406
307
 
407
- endUpload();
408
- } catch (error: unknown) {
409
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
410
- endUpload();
308
+ // Validate file size
309
+ if (size > MAX_FILE_SIZE) {
310
+ toast.error(
311
+ t('fileManagement.toasts.fileTooLarge', {
312
+ name,
313
+ maxSize: formatFileSize(MAX_FILE_SIZE),
314
+ }),
315
+ );
316
+ continue;
411
317
  }
412
- };
413
318
 
414
- // Memoized because the orchestrator builds the upload-preview header's back
415
- // NODE from it (`fmHeaderBack`): a node can only be compared by identity, so
416
- // a fresh closure here re-creates the node every render and thrashes the
417
- // surface-header bridge into an unbounded update loop (React error #185).
418
- const handleCancelUpload = useCallback(() => {
419
- clearPostSelectTimer();
319
+ const fileType = candidateType(file);
420
320
 
421
- // Cleanup preview URLs
422
- for (const pf of pendingFiles) {
423
- revokePreviewUrl(pf.preview);
424
- }
425
- setPendingFiles([]);
426
- setShowUploadPreview(false);
427
- }, [clearPostSelectTimer, pendingFiles]);
428
-
429
- const removePendingFile = (id: string) => {
430
- const file = pendingFiles.find((pf) => pf.id === id);
431
- if (!file) return;
432
- if (file.preview) {
433
- revokePreviewUrl(file.preview);
321
+ if (imagesOnly && !fileType.startsWith('image/')) {
322
+ toast.error(t('fileManagement.toasts.imagesOnlyRequired'));
323
+ continue;
434
324
  }
435
- const updated = pendingFiles.filter((pf) => pf.id !== id);
436
- setPendingFiles(updated);
437
- if (updated.length === 0) {
438
- setShowUploadPreview(false);
439
- }
440
- };
441
325
 
442
- /**
443
- * Handle file upload - opens document picker and processes selected files
444
- * Expo 54 compatible - works on web, iOS, and Android
445
- *
446
- * Memoized because the orchestrator feeds it to the picker header's
447
- * `primaryAction` (the Upload CTA) through a `useMemo`: a fresh closure each
448
- * render invalidates that memo every render, which is the input the
449
- * surface-header bridge is guarding against.
450
- */
451
- const handleFileUpload = useCallback(async () => {
452
- // Prevent concurrent document picker calls
453
- if (isPickingDocument) {
454
- toast.error(t('fileManagement.toasts.waitForSelection'));
455
- return;
326
+ // Generate preview for images - unified approach
327
+ let preview: string | undefined;
328
+ if (fileType.startsWith('image/')) {
329
+ // Try to use file URI from expo-document-picker if available (works on all platforms)
330
+ const fileUri = candidateUri(file);
331
+ if (
332
+ fileUri &&
333
+ (fileUri.startsWith('file://') ||
334
+ fileUri.startsWith('content://') ||
335
+ fileUri.startsWith('http://') ||
336
+ fileUri.startsWith('https://') ||
337
+ fileUri.startsWith('blob:'))
338
+ ) {
339
+ preview = fileUri;
340
+ } else {
341
+ // Fallback: create blob URL if possible (works on web only)
342
+ try {
343
+ if (
344
+ (typeof File !== 'undefined' && file instanceof File) ||
345
+ (typeof Blob !== 'undefined' && file instanceof Blob)
346
+ ) {
347
+ preview = URL.createObjectURL(file as Blob);
348
+ }
349
+ } catch {
350
+ // Preview is optional — continue without it.
351
+ }
352
+ }
456
353
  }
457
354
 
458
- try {
459
- setIsPickingDocument(true);
460
-
461
- // Lazy load expo-document-picker
462
- const picker = await loadDocumentPicker();
463
-
464
- // Use expo-document-picker (works on all platforms including web)
465
- // On web, it uses the native file input and provides File objects directly
466
- const result = await picker.getDocumentAsync({
467
- type: imagesOnly ? 'image/*' : '*/*',
468
- multiple: true,
469
- copyToCacheDirectory: true,
470
- });
471
-
472
- if (result.canceled) {
473
- setIsPickingDocument(false);
474
- return;
355
+ processedFiles.push(createPendingUploadFile(file, preview, size, name, fileType));
356
+ }
357
+
358
+ if (processedFiles.length === 0) {
359
+ toast.error(t('fileManagement.toasts.noValidFiles'));
360
+ return;
361
+ }
362
+
363
+ // Show preview modal for user to review files before upload
364
+ setPendingFiles(processedFiles);
365
+ setShowUploadPreview(true);
366
+ },
367
+ [imagesOnly, t],
368
+ );
369
+
370
+ const handleConfirmUpload = async () => {
371
+ if (pendingFiles.length === 0) return;
372
+
373
+ setShowUploadPreview(false);
374
+ uploadStartRef.current = Date.now();
375
+ setUploading(true);
376
+ setUploadProgress(null);
377
+
378
+ try {
379
+ const filesToUpload = pendingFiles.map((pf) => pf.file);
380
+ setUploadProgress({ current: 0, total: filesToUpload.length });
381
+ const uploadedFiles = await processFileUploads(filesToUpload);
382
+
383
+ // Cleanup preview URLs
384
+ for (const pf of pendingFiles) {
385
+ revokePreviewUrl(pf.preview);
386
+ }
387
+ setPendingFiles([]);
388
+
389
+ // If in selectMode, automatically select the uploaded file(s)
390
+ if (selectMode && uploadedFiles.length > 0) {
391
+ // Defer one tick so the query cache has settled before selecting.
392
+ clearPostSelectTimer();
393
+ postSelectTimerRef.current = setTimeout(() => {
394
+ postSelectTimerRef.current = null;
395
+ if (!isActiveRef.current) return;
396
+
397
+ const fileToSelect = uploadedFiles[0];
398
+ if (!multiSelect && fileToSelect) {
399
+ if (onPicked) {
400
+ // Forward-navigation picker (avatar flow): hand the
401
+ // freshly-uploaded file onward (to the cropper). No
402
+ // dismiss/close — the picker frame stays below.
403
+ onPicked(fileToSelect);
404
+ } else {
405
+ // Single select mode - directly call onSelect callback
406
+ onSelect?.(fileToSelect);
407
+ if (afterSelect === 'back') {
408
+ goBack?.();
409
+ } else if (afterSelect === 'close') {
410
+ onClose?.();
411
+ }
475
412
  }
476
-
477
- if (!result.assets || result.assets.length === 0) {
478
- setIsPickingDocument(false);
479
- toast.error(t('fileManagement.toasts.noFilesSelected'));
480
- return;
413
+ } else if (multiSelect) {
414
+ // Multi-select mode - add all uploaded files to selection
415
+ for (const file of uploadedFiles) {
416
+ if (!selectedIds.has(file.id)) {
417
+ setSelectedIds((prev) => new Set(prev).add(file.id));
418
+ }
481
419
  }
420
+ }
421
+ }, 500);
422
+ }
423
+
424
+ endUpload();
425
+ } catch (error: unknown) {
426
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
427
+ endUpload();
428
+ }
429
+ };
430
+
431
+ // Memoized because the orchestrator builds the upload-preview header's back
432
+ // NODE from it (`fmHeaderBack`): a node can only be compared by identity, so
433
+ // a fresh closure here re-creates the node every render and thrashes the
434
+ // surface-header bridge into an unbounded update loop (React error #185).
435
+ const handleCancelUpload = useCallback(() => {
436
+ clearPostSelectTimer();
437
+
438
+ // Cleanup preview URLs
439
+ for (const pf of pendingFiles) {
440
+ revokePreviewUrl(pf.preview);
441
+ }
442
+ setPendingFiles([]);
443
+ setShowUploadPreview(false);
444
+ }, [clearPostSelectTimer, pendingFiles]);
445
+
446
+ const removePendingFile = (id: string) => {
447
+ const file = pendingFiles.find((pf) => pf.id === id);
448
+ if (!file) return;
449
+ if (file.preview) {
450
+ revokePreviewUrl(file.preview);
451
+ }
452
+ const updated = pendingFiles.filter((pf) => pf.id !== id);
453
+ setPendingFiles(updated);
454
+ if (updated.length === 0) {
455
+ setShowUploadPreview(false);
456
+ }
457
+ };
458
+
459
+ /**
460
+ * Handle file upload - opens document picker and processes selected files
461
+ * Expo 54 compatible - works on web, iOS, and Android
462
+ *
463
+ * Memoized because the orchestrator feeds it to the picker header's
464
+ * `primaryAction` (the Upload CTA) through a `useMemo`: a fresh closure each
465
+ * render invalidates that memo every render, which is the input the
466
+ * surface-header bridge is guarding against.
467
+ */
468
+ const handleFileUpload = useCallback(async () => {
469
+ // Prevent concurrent document picker calls
470
+ if (isPickingDocument) {
471
+ toast.error(t('fileManagement.toasts.waitForSelection'));
472
+ return;
473
+ }
482
474
 
483
- // Convert expo document picker results to File-like objects
484
- // According to Expo 54 docs, expo-document-picker returns assets with:
485
- // - uri: file URI (file://, content://, or blob URL)
486
- // - name: file name
487
- // - size: file size in bytes
488
- // - mimeType: MIME type of the file
489
- // - file: (optional) native File object (usually only on web)
490
- const files: UploadCandidate[] = [];
491
- const errors: string[] = [];
492
-
493
- // Process files in parallel for better performance
494
- // This allows multiple files to be converted simultaneously
495
- const conversionPromises = result.assets.map((doc, index) =>
496
- convertDocumentPickerAssetToFile(doc, index)
497
- .then((file): UploadCandidate | null => {
498
- if (file) {
499
- // Validate file has required properties before adding
500
- if (!file.name || (file as { size?: number }).size === undefined) {
501
- errors.push(`File "${doc.name || 'file'}" is invalid: missing required properties`);
502
- return null;
503
- }
504
- return file;
505
- }
506
- return null;
507
- })
508
- .catch((error: unknown) => {
509
- errors.push(`File "${doc.name || 'file'}": ${getErrorMessage(error) || 'Failed to process'}`);
510
- return null;
511
- })
512
- );
513
-
514
- const convertedFiles = await Promise.all(conversionPromises);
515
-
516
- // Filter out null values
517
- for (const file of convertedFiles) {
518
- if (file) {
519
- files.push(file);
520
- }
475
+ try {
476
+ setIsPickingDocument(true);
477
+
478
+ // Lazy load expo-document-picker
479
+ const picker = await loadDocumentPicker();
480
+
481
+ // Use expo-document-picker (works on all platforms including web)
482
+ // On web, it uses the native file input and provides File objects directly
483
+ const result = await picker.getDocumentAsync({
484
+ type: imagesOnly ? 'image/*' : '*/*',
485
+ multiple: true,
486
+ copyToCacheDirectory: true,
487
+ });
488
+
489
+ if (result.canceled) {
490
+ setIsPickingDocument(false);
491
+ return;
492
+ }
493
+
494
+ if (!result.assets || result.assets.length === 0) {
495
+ setIsPickingDocument(false);
496
+ toast.error(t('fileManagement.toasts.noFilesSelected'));
497
+ return;
498
+ }
499
+
500
+ // Convert expo document picker results to File-like objects
501
+ // According to Expo 54 docs, expo-document-picker returns assets with:
502
+ // - uri: file URI (file://, content://, or blob URL)
503
+ // - name: file name
504
+ // - size: file size in bytes
505
+ // - mimeType: MIME type of the file
506
+ // - file: (optional) native File object (usually only on web)
507
+ const files: UploadCandidate[] = [];
508
+ const errors: string[] = [];
509
+
510
+ // Process files in parallel for better performance
511
+ // This allows multiple files to be converted simultaneously
512
+ const conversionPromises = result.assets.map((doc, index) =>
513
+ convertDocumentPickerAssetToFile(doc, index)
514
+ .then((file): UploadCandidate | null => {
515
+ if (file) {
516
+ // Validate file has required properties before adding
517
+ if (!file.name || (file as { size?: number }).size === undefined) {
518
+ errors.push(`File "${doc.name || 'file'}" is invalid: missing required properties`);
519
+ return null;
520
+ }
521
+ return file;
521
522
  }
523
+ return null;
524
+ })
525
+ .catch((error: unknown) => {
526
+ errors.push(
527
+ `File "${doc.name || 'file'}": ${getErrorMessage(error) || 'Failed to process'}`,
528
+ );
529
+ return null;
530
+ }),
531
+ );
522
532
 
523
- // Show errors if any
524
- if (errors.length > 0) {
525
- const errorMessage = errors.slice(0, 3).join('\n') + (errors.length > 3 ? `\n...and ${errors.length - 3} more` : '');
526
- toast.error(t('fileManagement.toasts.loadSomeFailed', { errors: errorMessage }));
527
- }
533
+ const convertedFiles = await Promise.all(conversionPromises);
528
534
 
529
- // Process successfully converted files
530
- if (files.length > 0) {
531
- await handleFileSelection(files);
532
- } else {
533
- // Files were selected but none could be converted
534
- toast.error(t('fileManagement.toasts.noFilesProcessed'));
535
- }
536
- } catch (error: unknown) {
537
- if (getErrorMessage(error)?.includes('expo-document-picker') || getErrorMessage(error)?.includes('Different document picking in progress')) {
538
- if (getErrorMessage(error)?.includes('Different document picking in progress')) {
539
- toast.error(t('fileManagement.toasts.waitForSelection'));
540
- } else {
541
- toast.error(t('fileManagement.toasts.filePickerNotAvailable'));
542
- }
543
- } else {
544
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.selectFilesFailed'));
545
- }
546
- } finally {
547
- // Always reset the picking state, even if there was an error
548
- setIsPickingDocument(false);
535
+ // Filter out null values
536
+ for (const file of convertedFiles) {
537
+ if (file) {
538
+ files.push(file);
549
539
  }
550
- }, [isPickingDocument, imagesOnly, handleFileSelection, t]);
551
-
552
- return {
553
- isPickingDocument,
554
- pendingFiles,
555
- showUploadPreview,
556
- uploading,
557
- uploadProgress,
558
- handleFileUpload,
559
- handleConfirmUpload,
560
- handleCancelUpload,
561
- removePendingFile,
562
- };
540
+ }
541
+
542
+ // Show errors if any
543
+ if (errors.length > 0) {
544
+ const errorMessage =
545
+ errors.slice(0, 3).join('\n') +
546
+ (errors.length > 3 ? `\n...and ${errors.length - 3} more` : '');
547
+ toast.error(t('fileManagement.toasts.loadSomeFailed', { errors: errorMessage }));
548
+ }
549
+
550
+ // Process successfully converted files
551
+ if (files.length > 0) {
552
+ await handleFileSelection(files);
553
+ } else {
554
+ // Files were selected but none could be converted
555
+ toast.error(t('fileManagement.toasts.noFilesProcessed'));
556
+ }
557
+ } catch (error: unknown) {
558
+ if (
559
+ getErrorMessage(error)?.includes('expo-document-picker') ||
560
+ getErrorMessage(error)?.includes('Different document picking in progress')
561
+ ) {
562
+ if (getErrorMessage(error)?.includes('Different document picking in progress')) {
563
+ toast.error(t('fileManagement.toasts.waitForSelection'));
564
+ } else {
565
+ toast.error(t('fileManagement.toasts.filePickerNotAvailable'));
566
+ }
567
+ } else {
568
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.selectFilesFailed'));
569
+ }
570
+ } finally {
571
+ // Always reset the picking state, even if there was an error
572
+ setIsPickingDocument(false);
573
+ }
574
+ }, [isPickingDocument, imagesOnly, handleFileSelection, t]);
575
+
576
+ return {
577
+ isPickingDocument,
578
+ pendingFiles,
579
+ showUploadPreview,
580
+ uploading,
581
+ uploadProgress,
582
+ handleFileUpload,
583
+ handleConfirmUpload,
584
+ handleCancelUpload,
585
+ removePendingFile,
586
+ };
563
587
  };
564
588
 
565
589
  export default useFileUploadState;