@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
@@ -1,5 +1,15 @@
1
1
  import React, { useCallback, useMemo, useRef, useState } from 'react';
2
- import { View, TouchableOpacity, ActivityIndicator, RefreshControl, FlatList, Platform, Animated, useWindowDimensions, type LayoutChangeEvent } from 'react-native';
2
+ import {
3
+ View,
4
+ TouchableOpacity,
5
+ ActivityIndicator,
6
+ RefreshControl,
7
+ FlatList,
8
+ Platform,
9
+ Animated,
10
+ useWindowDimensions,
11
+ type LayoutChangeEvent,
12
+ } from 'react-native';
3
13
  import { Text } from '@oxy.so/bloom/typography';
4
14
  import { Image as ExpoImage } from 'expo-image';
5
15
  import Ionicons from '../../icons/Ionicons';
@@ -17,51 +27,51 @@ import FileLibraryError from './FileLibraryError';
17
27
  */
18
28
  type HapticImpact = 'light' | 'medium' | 'heavy';
19
29
  interface HapticsModule {
20
- impactAsync: (style: unknown) => Promise<void>;
21
- selectionAsync: () => Promise<void>;
22
- ImpactFeedbackStyle: { Light: unknown; Medium: unknown; Heavy: unknown };
30
+ impactAsync: (style: unknown) => Promise<void>;
31
+ selectionAsync: () => Promise<void>;
32
+ ImpactFeedbackStyle: { Light: unknown; Medium: unknown; Heavy: unknown };
23
33
  }
24
34
 
25
35
  let hapticsModulePromise: Promise<HapticsModule | null> | null = null;
26
36
  const getHaptics = (): Promise<HapticsModule | null> => {
27
- if (Platform.OS === 'web') return Promise.resolve(null);
28
- if (hapticsModulePromise) return hapticsModulePromise;
29
- hapticsModulePromise = (async () => {
30
- try {
31
- const mod = (await import('expo-haptics')) as unknown as HapticsModule;
32
- if (!mod || typeof mod.impactAsync !== 'function') return null;
33
- return mod;
34
- } catch {
35
- return null;
36
- }
37
- })();
38
- return hapticsModulePromise;
39
- };
40
-
41
- const hapticImpact = async (style: HapticImpact): Promise<void> => {
42
- const h = await getHaptics();
43
- if (!h) return;
44
- const styleEnum =
45
- style === 'heavy'
46
- ? h.ImpactFeedbackStyle.Heavy
47
- : style === 'medium'
48
- ? h.ImpactFeedbackStyle.Medium
49
- : h.ImpactFeedbackStyle.Light;
37
+ if (Platform.OS === 'web') return Promise.resolve(null);
38
+ if (hapticsModulePromise) return hapticsModulePromise;
39
+ hapticsModulePromise = (async () => {
50
40
  try {
51
- await h.impactAsync(styleEnum);
41
+ const mod = (await import('expo-haptics')) as unknown as HapticsModule;
42
+ if (!mod || typeof mod.impactAsync !== 'function') return null;
43
+ return mod;
52
44
  } catch {
53
- // Silent — haptics are non-critical UX polish.
45
+ return null;
54
46
  }
47
+ })();
48
+ return hapticsModulePromise;
49
+ };
50
+
51
+ const hapticImpact = async (style: HapticImpact): Promise<void> => {
52
+ const h = await getHaptics();
53
+ if (!h) return;
54
+ const styleEnum =
55
+ style === 'heavy'
56
+ ? h.ImpactFeedbackStyle.Heavy
57
+ : style === 'medium'
58
+ ? h.ImpactFeedbackStyle.Medium
59
+ : h.ImpactFeedbackStyle.Light;
60
+ try {
61
+ await h.impactAsync(styleEnum);
62
+ } catch {
63
+ // Silent — haptics are non-critical UX polish.
64
+ }
55
65
  };
56
66
 
57
67
  const hapticSelection = async (): Promise<void> => {
58
- const h = await getHaptics();
59
- if (!h) return;
60
- try {
61
- await h.selectionAsync();
62
- } catch {
63
- // Silent.
64
- }
68
+ const h = await getHaptics();
69
+ if (!h) return;
70
+ try {
71
+ await h.selectionAsync();
72
+ } catch {
73
+ // Silent.
74
+ }
65
75
  };
66
76
 
67
77
  /**
@@ -88,37 +98,37 @@ const FLOATING_NAV_BAR_HEIGHT = 52;
88
98
  * the parent — this component is purely presentational.
89
99
  */
90
100
  export interface PhotoPickerViewProps {
91
- photos: FileMetadata[];
92
- selectedIds: Set<string>;
93
- multiSelect: boolean;
94
- maxSelection?: number;
95
- allowUpload: boolean;
96
- refreshing: boolean;
97
- uploading: boolean;
98
- isPickingDocument: boolean;
99
- hasMore: boolean;
100
- loadingMore: boolean;
101
- /**
102
- * Initial-load flag. While `true` AND no photos have arrived yet, the picker
103
- * renders its OWN loading skeleton (placement-aware grid of shimmer tiles)
104
- * instead of the empty state — so the loading UI matches the picker's shape
105
- * and container width, not the browse file-manager chrome.
106
- */
107
- loading: boolean;
108
- /** Terminal load failure (nothing cached) — renders a distinct error state. */
109
- loadError: boolean;
110
- /** Retry the failed list load (wired to the query's refetch). */
111
- onRetry: () => void;
112
- reduceMotion: boolean;
113
- getThumbUrl: (file: FileMetadata) => string | undefined;
114
- primaryColor: string;
115
- isOwner: boolean;
116
- onTogglePhoto: (photo: FileMetadata) => void;
117
- onPreviewPhoto: (photo: FileMetadata) => void;
118
- onUpload: () => void;
119
- onRefresh: () => void;
120
- onLoadMore: () => void;
121
- t: (key: string, vars?: Record<string, string | number>) => string;
101
+ photos: FileMetadata[];
102
+ selectedIds: Set<string>;
103
+ multiSelect: boolean;
104
+ maxSelection?: number;
105
+ allowUpload: boolean;
106
+ refreshing: boolean;
107
+ uploading: boolean;
108
+ isPickingDocument: boolean;
109
+ hasMore: boolean;
110
+ loadingMore: boolean;
111
+ /**
112
+ * Initial-load flag. While `true` AND no photos have arrived yet, the picker
113
+ * renders its OWN loading skeleton (placement-aware grid of shimmer tiles)
114
+ * instead of the empty state — so the loading UI matches the picker's shape
115
+ * and container width, not the browse file-manager chrome.
116
+ */
117
+ loading: boolean;
118
+ /** Terminal load failure (nothing cached) — renders a distinct error state. */
119
+ loadError: boolean;
120
+ /** Retry the failed list load (wired to the query's refetch). */
121
+ onRetry: () => void;
122
+ reduceMotion: boolean;
123
+ getThumbUrl: (file: FileMetadata) => string | undefined;
124
+ primaryColor: string;
125
+ isOwner: boolean;
126
+ onTogglePhoto: (photo: FileMetadata) => void;
127
+ onPreviewPhoto: (photo: FileMetadata) => void;
128
+ onUpload: () => void;
129
+ onRefresh: () => void;
130
+ onLoadMore: () => void;
131
+ t: (key: string, vars?: Record<string, string | number>) => string;
122
132
  }
123
133
 
124
134
  /**
@@ -159,20 +169,20 @@ const SKELETON_TILE_COLOR = '#26262A';
159
169
  const SKELETON_MIN_ROWS = 4;
160
170
 
161
171
  type PhotoPickerCellProps = {
162
- photo: FileMetadata;
163
- size: number;
164
- marginRight: number;
165
- marginBottom: number;
166
- isSelected: boolean;
167
- selectionIndex: number;
168
- dim: boolean;
169
- primaryColor: string;
170
- thumbUrl: string | undefined;
171
- enterIndex: number;
172
- reduceMotion: boolean;
173
- onPress: () => void;
174
- onLongPress: () => void;
175
- a11yLabel: string;
172
+ photo: FileMetadata;
173
+ size: number;
174
+ marginRight: number;
175
+ marginBottom: number;
176
+ isSelected: boolean;
177
+ selectionIndex: number;
178
+ dim: boolean;
179
+ primaryColor: string;
180
+ thumbUrl: string | undefined;
181
+ enterIndex: number;
182
+ reduceMotion: boolean;
183
+ onPress: () => void;
184
+ onLongPress: () => void;
185
+ a11yLabel: string;
176
186
  };
177
187
 
178
188
  /**
@@ -186,438 +196,461 @@ type PhotoPickerCellProps = {
186
196
  * one component covers both the animated and the reduced-motion paths.
187
197
  */
188
198
  const PhotoPickerCell = React.memo(function PhotoPickerCell(props: PhotoPickerCellProps) {
189
- const {
190
- photo, size, marginRight, marginBottom, isSelected, selectionIndex,
191
- dim, primaryColor, thumbUrl, enterIndex, reduceMotion,
192
- onPress, onLongPress, a11yLabel,
193
- } = props;
199
+ const {
200
+ photo,
201
+ size,
202
+ marginRight,
203
+ marginBottom,
204
+ isSelected,
205
+ selectionIndex,
206
+ dim,
207
+ primaryColor,
208
+ thumbUrl,
209
+ enterIndex,
210
+ reduceMotion,
211
+ onPress,
212
+ onLongPress,
213
+ a11yLabel,
214
+ } = props;
194
215
 
195
- const delay = Math.min(enterIndex * STAGGER_PER_CELL_MS, MAX_TOTAL_STAGGER_MS);
216
+ const delay = Math.min(enterIndex * STAGGER_PER_CELL_MS, MAX_TOTAL_STAGGER_MS);
196
217
 
197
- // Entrance fade, staggered by the cell's grid index. Started from the wrapper's
198
- // ref callback (fires on mount) rather than an effect. Reduce-motion pins
199
- // opacity at 1 and never animates.
200
- //
201
- // CRITICAL: `Animated.View` rebuilds its merged ref on every render, so React
202
- // re-invokes this callback on EVERY commit (not just mount) — and re-running
203
- // `Animated.timing().start()`/`setValue` each time drives a web re-render that
204
- // re-fires the ref → "Maximum update depth exceeded" once the grid has cells.
205
- // The `startedRef` latch makes it genuinely run-once per mount, breaking the
206
- // loop. (jest/react-test-renderer never exercises the Animated merged-ref path,
207
- // so this only reproduces in a real browser.)
208
- const opacity = useRef(new Animated.Value(reduceMotion ? 1 : 0)).current;
209
- const startedRef = useRef(false);
210
- const startEntrance = useCallback((node: unknown) => {
211
- if (!node) return; // unmount
212
- if (startedRef.current) return; // ref re-fired on a later commit — already ran
213
- startedRef.current = true;
214
- if (reduceMotion) {
215
- opacity.setValue(1);
216
- return;
217
- }
218
- opacity.setValue(0);
219
- Animated.timing(opacity, {
220
- toValue: 1,
221
- duration: ENTRANCE_DURATION_MS,
222
- delay,
223
- useNativeDriver: Platform.OS !== 'web',
224
- }).start();
225
- }, [opacity, delay, reduceMotion]);
218
+ // Entrance fade, staggered by the cell's grid index. Started from the wrapper's
219
+ // ref callback (fires on mount) rather than an effect. Reduce-motion pins
220
+ // opacity at 1 and never animates.
221
+ //
222
+ // CRITICAL: `Animated.View` rebuilds its merged ref on every render, so React
223
+ // re-invokes this callback on EVERY commit (not just mount) — and re-running
224
+ // `Animated.timing().start()`/`setValue` each time drives a web re-render that
225
+ // re-fires the ref → "Maximum update depth exceeded" once the grid has cells.
226
+ // The `startedRef` latch makes it genuinely run-once per mount, breaking the
227
+ // loop. (jest/react-test-renderer never exercises the Animated merged-ref path,
228
+ // so this only reproduces in a real browser.)
229
+ const opacity = useRef(new Animated.Value(reduceMotion ? 1 : 0)).current;
230
+ const startedRef = useRef(false);
231
+ const startEntrance = useCallback(
232
+ (node: unknown) => {
233
+ if (!node) return; // unmount
234
+ if (startedRef.current) return; // ref re-fired on a later commit — already ran
235
+ startedRef.current = true;
236
+ if (reduceMotion) {
237
+ opacity.setValue(1);
238
+ return;
239
+ }
240
+ opacity.setValue(0);
241
+ Animated.timing(opacity, {
242
+ toValue: 1,
243
+ duration: ENTRANCE_DURATION_MS,
244
+ delay,
245
+ useNativeDriver: Platform.OS !== 'web',
246
+ }).start();
247
+ },
248
+ [opacity, delay, reduceMotion],
249
+ );
226
250
 
227
- // Selection-ring pulse: a quick scale bump that springs back to rest. The ring
228
- // renders ONLY while selected, so its own mount IS the "became selected"
229
- // signal — driven from the ring's ref callback, not an effect. Reduce-motion
230
- // holds the ring at rest scale. Same run-once latch as the entrance (the ring's
231
- // `Animated.View` re-fires this ref every commit too) — reset on unmount so a
232
- // later re-selection pulses again.
233
- const ringScale = useRef(new Animated.Value(1)).current;
234
- const pulsedRef = useRef(false);
235
- const startRingPulse = useCallback((node: unknown) => {
236
- if (!node) {
237
- pulsedRef.current = false; // ring unmounted (deselected) — arm the next pulse
238
- return;
239
- }
240
- if (pulsedRef.current) return; // ref re-fired on a later commit — already pulsed
241
- pulsedRef.current = true;
242
- ringScale.setValue(1);
243
- if (reduceMotion) return;
244
- Animated.sequence([
245
- Animated.timing(ringScale, {
246
- toValue: RING_PULSE_PEAK,
247
- duration: RING_PULSE_UP_MS,
248
- useNativeDriver: Platform.OS !== 'web',
249
- }),
250
- Animated.spring(ringScale, {
251
- toValue: 1,
252
- friction: RING_SPRING_FRICTION,
253
- tension: RING_SPRING_TENSION,
254
- useNativeDriver: Platform.OS !== 'web',
255
- }),
256
- ]).start();
257
- }, [ringScale, reduceMotion]);
251
+ // Selection-ring pulse: a quick scale bump that springs back to rest. The ring
252
+ // renders ONLY while selected, so its own mount IS the "became selected"
253
+ // signal — driven from the ring's ref callback, not an effect. Reduce-motion
254
+ // holds the ring at rest scale. Same run-once latch as the entrance (the ring's
255
+ // `Animated.View` re-fires this ref every commit too) — reset on unmount so a
256
+ // later re-selection pulses again.
257
+ const ringScale = useRef(new Animated.Value(1)).current;
258
+ const pulsedRef = useRef(false);
259
+ const startRingPulse = useCallback(
260
+ (node: unknown) => {
261
+ if (!node) {
262
+ pulsedRef.current = false; // ring unmounted (deselected) — arm the next pulse
263
+ return;
264
+ }
265
+ if (pulsedRef.current) return; // ref re-fired on a later commit — already pulsed
266
+ pulsedRef.current = true;
267
+ ringScale.setValue(1);
268
+ if (reduceMotion) return;
269
+ Animated.sequence([
270
+ Animated.timing(ringScale, {
271
+ toValue: RING_PULSE_PEAK,
272
+ duration: RING_PULSE_UP_MS,
273
+ useNativeDriver: Platform.OS !== 'web',
274
+ }),
275
+ Animated.spring(ringScale, {
276
+ toValue: 1,
277
+ friction: RING_SPRING_FRICTION,
278
+ tension: RING_SPRING_TENSION,
279
+ useNativeDriver: Platform.OS !== 'web',
280
+ }),
281
+ ]).start();
282
+ },
283
+ [ringScale, reduceMotion],
284
+ );
258
285
 
259
- return (
260
- // The animated wrapper carries the entrance opacity + the layout box as
261
- // inline `style`: animated values must be inline, and the box's
262
- // size/margins are runtime pixels className cannot express. `className`
263
- // drives the static chrome below (`flex-1` fills this fixed-size box).
264
- <Animated.View
265
- ref={startEntrance}
286
+ return (
287
+ // The animated wrapper carries the entrance opacity + the layout box as
288
+ // inline `style`: animated values must be inline, and the box's
289
+ // size/margins are runtime pixels className cannot express. `className`
290
+ // drives the static chrome below (`flex-1` fills this fixed-size box).
291
+ <Animated.View
292
+ ref={startEntrance}
293
+ style={{
294
+ width: size,
295
+ height: size,
296
+ marginRight,
297
+ marginBottom,
298
+ position: 'relative',
299
+ opacity,
300
+ }}
301
+ >
302
+ <TouchableOpacity
303
+ activeOpacity={0.85}
304
+ onPress={onPress}
305
+ onLongPress={onLongPress}
306
+ className="flex-1"
307
+ accessibilityRole="button"
308
+ accessibilityLabel={a11yLabel}
309
+ accessibilityState={{ selected: isSelected }}
310
+ >
311
+ <View
312
+ className={`flex-1 rounded-radius-8 overflow-hidden bg-[#111111]${dim ? ' opacity-60' : ''}`}
313
+ >
314
+ <ExpoImage
315
+ source={{ uri: thumbUrl }}
316
+ style={{ width: '100%', height: '100%' }}
317
+ contentFit="cover"
318
+ transition={120}
319
+ cachePolicy="memory-disk"
320
+ accessibilityLabel={photo.filename}
321
+ />
322
+ </View>
323
+ {isSelected && (
324
+ <Animated.View
325
+ ref={startRingPulse}
266
326
  style={{
267
- width: size,
268
- height: size,
269
- marginRight,
270
- marginBottom,
271
- position: 'relative',
272
- opacity,
327
+ position: 'absolute',
328
+ top: 0,
329
+ right: 0,
330
+ bottom: 0,
331
+ left: 0,
332
+ borderRadius: CELL_CORNER_RADIUS,
333
+ borderWidth: SELECTION_RING_WIDTH,
334
+ borderColor: primaryColor,
335
+ transform: [{ scale: ringScale }],
336
+ pointerEvents: 'none',
273
337
  }}
274
- >
275
- <TouchableOpacity
276
- activeOpacity={0.85}
277
- onPress={onPress}
278
- onLongPress={onLongPress}
279
- className="flex-1"
280
- accessibilityRole="button"
281
- accessibilityLabel={a11yLabel}
282
- accessibilityState={{ selected: isSelected }}
283
- >
284
- <View
285
- className={`flex-1 rounded-radius-8 overflow-hidden bg-[#111111]${dim ? ' opacity-60' : ''}`}
286
- >
287
- <ExpoImage
288
- source={{ uri: thumbUrl }}
289
- style={{ width: '100%', height: '100%' }}
290
- contentFit="cover"
291
- transition={120}
292
- cachePolicy="memory-disk"
293
- accessibilityLabel={photo.filename}
294
- />
295
- </View>
296
- {isSelected && (
297
- <Animated.View
298
- ref={startRingPulse}
299
- style={{
300
- position: 'absolute',
301
- top: 0,
302
- right: 0,
303
- bottom: 0,
304
- left: 0,
305
- borderRadius: CELL_CORNER_RADIUS,
306
- borderWidth: SELECTION_RING_WIDTH,
307
- borderColor: primaryColor,
308
- transform: [{ scale: ringScale }],
309
- pointerEvents: 'none',
310
- }}
311
- />
312
- )}
313
- {isSelected && (
314
- <View
315
- className="absolute top-1.5 right-1.5 min-w-[22px] h-[22px] px-1.5 rounded-full items-center justify-center"
316
- style={{ backgroundColor: primaryColor, pointerEvents: 'none' }}
317
- >
318
- <Text className="text-white text-[12px] font-bold leading-[14px]">
319
- {selectionIndex > 0 ? String(selectionIndex) : ''}
320
- </Text>
321
- </View>
322
- )}
323
- </TouchableOpacity>
324
- </Animated.View>
325
- );
338
+ />
339
+ )}
340
+ {isSelected && (
341
+ <View
342
+ className="absolute top-1.5 right-1.5 min-w-[22px] h-[22px] px-1.5 rounded-full items-center justify-center"
343
+ style={{ backgroundColor: primaryColor, pointerEvents: 'none' }}
344
+ >
345
+ <Text className="text-white text-[12px] font-bold leading-[14px]">
346
+ {selectionIndex > 0 ? String(selectionIndex) : ''}
347
+ </Text>
348
+ </View>
349
+ )}
350
+ </TouchableOpacity>
351
+ </Animated.View>
352
+ );
326
353
  });
327
354
 
328
355
  const PhotoPickerView: React.FC<PhotoPickerViewProps> = ({
329
- photos,
330
- selectedIds,
331
- multiSelect,
332
- maxSelection,
333
- allowUpload,
334
- refreshing,
335
- uploading,
336
- isPickingDocument,
337
- hasMore,
338
- loadingMore,
339
- loading,
340
- loadError,
341
- onRetry,
342
- reduceMotion,
343
- getThumbUrl,
344
- primaryColor,
345
- isOwner,
346
- onTogglePhoto,
347
- onPreviewPhoto,
348
- onUpload,
349
- onRefresh,
350
- onLoadMore,
351
- t,
356
+ photos,
357
+ selectedIds,
358
+ multiSelect,
359
+ maxSelection,
360
+ allowUpload,
361
+ refreshing,
362
+ uploading,
363
+ isPickingDocument,
364
+ hasMore,
365
+ loadingMore,
366
+ loading,
367
+ loadError,
368
+ onRetry,
369
+ reduceMotion,
370
+ getThumbUrl,
371
+ primaryColor,
372
+ isOwner,
373
+ onTogglePhoto,
374
+ onPreviewPhoto,
375
+ onUpload,
376
+ onRefresh,
377
+ onLoadMore,
378
+ t,
352
379
  }) => {
353
- // Grid sizing width. We PREFER the measured grid-container width (the
354
- // bottom-sheet content width) so tiles size to the sheet, not the device
355
- // screen — on wide viewports the sheet is centered/narrower than the screen.
356
- // But we must NEVER gate the whole grid on that measurement: `onLayout` is
357
- // unreliable on web (react-native-css can suppress it), and a grid that only
358
- // renders after a measurement can stay blank forever. So we fall back to the
359
- // window width until a real measurement arrives — the grid ALWAYS renders,
360
- // then snaps to the sheet width once `onLayout` reports it. The measured
361
- // wrapper carries ONLY a `style` (no `className`) to maximise the chance
362
- // `onLayout` fires on web.
363
- const { width: windowWidth, height: windowHeight } = useWindowDimensions();
364
- const [gridWidth, setGridWidth] = useState(0);
365
- const onRootLayout = useCallback((e: LayoutChangeEvent) => {
366
- const w = Math.round(e.nativeEvent.layout.width);
367
- setGridWidth((prev) => (prev === w ? prev : w));
368
- }, []);
380
+ // Grid sizing width. We PREFER the measured grid-container width (the
381
+ // bottom-sheet content width) so tiles size to the sheet, not the device
382
+ // screen — on wide viewports the sheet is centered/narrower than the screen.
383
+ // But we must NEVER gate the whole grid on that measurement: `onLayout` is
384
+ // unreliable on web (react-native-css can suppress it), and a grid that only
385
+ // renders after a measurement can stay blank forever. So we fall back to the
386
+ // window width until a real measurement arrives — the grid ALWAYS renders,
387
+ // then snaps to the sheet width once `onLayout` reports it. The measured
388
+ // wrapper carries ONLY a `style` (no `className`) to maximise the chance
389
+ // `onLayout` fires on web.
390
+ const { width: windowWidth, height: windowHeight } = useWindowDimensions();
391
+ const [gridWidth, setGridWidth] = useState(0);
392
+ const onRootLayout = useCallback((e: LayoutChangeEvent) => {
393
+ const w = Math.round(e.nativeEvent.layout.width);
394
+ setGridWidth((prev) => (prev === w ? prev : w));
395
+ }, []);
369
396
 
370
- // The picker FILLS its panel: the surface morphs the container UP to an
371
- // explicit large target (`frameSize.heightRatio: 0.9` in `surfaceRegistry`),
372
- // and this root takes that SAME 0.9-of-viewport height. Under `tone:'onImage'`
373
- // the Dialog inserts NO nav-bar spacer, so the grid uses the FULL morph target
374
- // (no `-52`) and slides up under the floating bar, edge-to-edge, within the
375
- // panel's `maxHeightRatio: 0.9` cap. A `flex: 1` root can't fill (no definite
376
- // bound propagates through the sheet's flex chain at rest, where the panel is
377
- // height:auto), so the fixed height is required; the FlatList scrolls within
378
- // it. Keep the 0.9 ratio in sync with the picker's `frameSize` in
379
- // `surfaceRegistry.ts`.
380
- const panelHeight = useMemo(() => Math.round(windowHeight * 0.9), [windowHeight]);
381
- const rootStyle = useMemo(() => ({ height: panelHeight }), [panelHeight]);
397
+ // The picker FILLS its panel: the surface morphs the container UP to an
398
+ // explicit large target (`frameSize.heightRatio: 0.9` in `surfaceRegistry`),
399
+ // and this root takes that SAME 0.9-of-viewport height. Under `tone:'onImage'`
400
+ // the Dialog inserts NO nav-bar spacer, so the grid uses the FULL morph target
401
+ // (no `-52`) and slides up under the floating bar, edge-to-edge, within the
402
+ // panel's `maxHeightRatio: 0.9` cap. A `flex: 1` root can't fill (no definite
403
+ // bound propagates through the sheet's flex chain at rest, where the panel is
404
+ // height:auto), so the fixed height is required; the FlatList scrolls within
405
+ // it. Keep the 0.9 ratio in sync with the picker's `frameSize` in
406
+ // `surfaceRegistry.ts`.
407
+ const panelHeight = useMemo(() => Math.round(windowHeight * 0.9), [windowHeight]);
408
+ const rootStyle = useMemo(() => ({ height: panelHeight }), [panelHeight]);
382
409
 
383
- const effectiveWidth = gridWidth > 0 ? gridWidth : windowWidth;
384
- const { columns, cellSize, gutter } = useMemo(
385
- () => computePhotoGridLayout(effectiveWidth),
386
- [effectiveWidth],
387
- );
410
+ const effectiveWidth = gridWidth > 0 ? gridWidth : windowWidth;
411
+ const { columns, cellSize, gutter } = useMemo(
412
+ () => computePhotoGridLayout(effectiveWidth),
413
+ [effectiveWidth],
414
+ );
388
415
 
389
- // How many shimmer tiles the loading skeleton renders: enough FULL rows to
390
- // fill the panel down to (but never past) its `maxHeight` cap, so the panel
391
- // hugs the skeleton content instead of overflowing or scrolling. `floor`
392
- // keeps the last row whole; `SKELETON_MIN_ROWS` guards a very short panel.
393
- const skeletonTileCount = useMemo(() => {
394
- const rowHeight = cellSize + gutter;
395
- if (rowHeight <= 0) return columns * SKELETON_MIN_ROWS;
396
- const available = Math.max(0, panelHeight - FLOATING_NAV_BAR_HEIGHT);
397
- const rows = Math.max(SKELETON_MIN_ROWS, Math.floor(available / rowHeight));
398
- return rows * columns;
399
- }, [cellSize, gutter, columns, panelHeight]);
416
+ // How many shimmer tiles the loading skeleton renders: enough FULL rows to
417
+ // fill the panel down to (but never past) its `maxHeight` cap, so the panel
418
+ // hugs the skeleton content instead of overflowing or scrolling. `floor`
419
+ // keeps the last row whole; `SKELETON_MIN_ROWS` guards a very short panel.
420
+ const skeletonTileCount = useMemo(() => {
421
+ const rowHeight = cellSize + gutter;
422
+ if (rowHeight <= 0) return columns * SKELETON_MIN_ROWS;
423
+ const available = Math.max(0, panelHeight - FLOATING_NAV_BAR_HEIGHT);
424
+ const rows = Math.max(SKELETON_MIN_ROWS, Math.floor(available / rowHeight));
425
+ return rows * columns;
426
+ }, [cellSize, gutter, columns, panelHeight]);
400
427
 
401
- // Map selectedIds → 1-based selection order for the badge. We freeze a
402
- // stable order at the time of selection: the order is the insertion
403
- // order of the Set (which JS preserves natively).
404
- const selectionOrder = useMemo(() => {
405
- const map = new Map<string, number>();
406
- let i = 1;
407
- for (const id of selectedIds) {
408
- map.set(id, i++);
409
- }
410
- return map;
411
- }, [selectedIds]);
428
+ // Map selectedIds → 1-based selection order for the badge. We freeze a
429
+ // stable order at the time of selection: the order is the insertion
430
+ // order of the Set (which JS preserves natively).
431
+ const selectionOrder = useMemo(() => {
432
+ const map = new Map<string, number>();
433
+ let i = 1;
434
+ for (const id of selectedIds) {
435
+ map.set(id, i++);
436
+ }
437
+ return map;
438
+ }, [selectedIds]);
412
439
 
413
- const hasAnySelection = selectedIds.size > 0;
440
+ const hasAnySelection = selectedIds.size > 0;
414
441
 
415
- const isEmpty = photos.length === 0;
416
- const atSelectionLimit =
417
- multiSelect && maxSelection != null && selectedIds.size >= maxSelection;
442
+ const isEmpty = photos.length === 0;
443
+ const atSelectionLimit = multiSelect && maxSelection != null && selectedIds.size >= maxSelection;
418
444
 
419
- const handleCellPress = useCallback(
420
- (photo: FileMetadata) => {
421
- if (Platform.OS !== 'web') {
422
- void hapticImpact('light');
423
- }
424
- onTogglePhoto(photo);
425
- },
426
- [onTogglePhoto],
427
- );
445
+ const handleCellPress = useCallback(
446
+ (photo: FileMetadata) => {
447
+ if (Platform.OS !== 'web') {
448
+ void hapticImpact('light');
449
+ }
450
+ onTogglePhoto(photo);
451
+ },
452
+ [onTogglePhoto],
453
+ );
428
454
 
429
- const handleCellLongPress = useCallback(
430
- (photo: FileMetadata) => {
431
- if (Platform.OS !== 'web') {
432
- void hapticSelection();
433
- }
434
- onPreviewPhoto(photo);
435
- },
436
- [onPreviewPhoto],
437
- );
455
+ const handleCellLongPress = useCallback(
456
+ (photo: FileMetadata) => {
457
+ if (Platform.OS !== 'web') {
458
+ void hapticSelection();
459
+ }
460
+ onPreviewPhoto(photo);
461
+ },
462
+ [onPreviewPhoto],
463
+ );
438
464
 
439
- // FlatList renderItem: each cell knows its enterIndex (for stagger).
440
- const renderItem = useCallback(
441
- ({ item, index }: { item: FileMetadata; index: number }) => {
442
- const isSelected = selectedIds.has(item.id);
443
- const selIndex = isSelected ? (selectionOrder.get(item.id) || 0) : 0;
444
- // Last column gets no right margin; last row no bottom margin
445
- // (FlatList handles row breaks via numColumns).
446
- const isLastInRow = (index + 1) % columns === 0;
447
- const a11yLabel = t(
448
- isSelected
449
- ? 'fileManagement.a11y.photoCellSelected'
450
- : 'fileManagement.a11y.photoCellUnselected',
451
- { name: item.filename || 'photo' },
452
- );
453
- return (
454
- <PhotoPickerCell
455
- photo={item}
456
- size={cellSize}
457
- marginRight={isLastInRow ? 0 : gutter}
458
- marginBottom={gutter}
459
- isSelected={isSelected}
460
- selectionIndex={selIndex}
461
- dim={
462
- multiSelect
463
- && !isSelected
464
- && (hasAnySelection || atSelectionLimit)
465
- }
466
- primaryColor={primaryColor}
467
- thumbUrl={getThumbUrl(item)}
468
- enterIndex={index}
469
- reduceMotion={reduceMotion}
470
- onPress={() => handleCellPress(item)}
471
- onLongPress={() => handleCellLongPress(item)}
472
- a11yLabel={a11yLabel}
473
- />
474
- );
475
- },
476
- [
477
- selectedIds, selectionOrder, columns, cellSize, gutter, multiSelect, hasAnySelection,
478
- atSelectionLimit, primaryColor, getThumbUrl, reduceMotion, handleCellPress,
479
- handleCellLongPress, t,
480
- ],
481
- );
465
+ // FlatList renderItem: each cell knows its enterIndex (for stagger).
466
+ const renderItem = useCallback(
467
+ ({ item, index }: { item: FileMetadata; index: number }) => {
468
+ const isSelected = selectedIds.has(item.id);
469
+ const selIndex = isSelected ? selectionOrder.get(item.id) || 0 : 0;
470
+ // Last column gets no right margin; last row no bottom margin
471
+ // (FlatList handles row breaks via numColumns).
472
+ const isLastInRow = (index + 1) % columns === 0;
473
+ const a11yLabel = t(
474
+ isSelected
475
+ ? 'fileManagement.a11y.photoCellSelected'
476
+ : 'fileManagement.a11y.photoCellUnselected',
477
+ { name: item.filename || 'photo' },
478
+ );
479
+ return (
480
+ <PhotoPickerCell
481
+ photo={item}
482
+ size={cellSize}
483
+ marginRight={isLastInRow ? 0 : gutter}
484
+ marginBottom={gutter}
485
+ isSelected={isSelected}
486
+ selectionIndex={selIndex}
487
+ dim={multiSelect && !isSelected && (hasAnySelection || atSelectionLimit)}
488
+ primaryColor={primaryColor}
489
+ thumbUrl={getThumbUrl(item)}
490
+ enterIndex={index}
491
+ reduceMotion={reduceMotion}
492
+ onPress={() => handleCellPress(item)}
493
+ onLongPress={() => handleCellLongPress(item)}
494
+ a11yLabel={a11yLabel}
495
+ />
496
+ );
497
+ },
498
+ [
499
+ selectedIds,
500
+ selectionOrder,
501
+ columns,
502
+ cellSize,
503
+ gutter,
504
+ multiSelect,
505
+ hasAnySelection,
506
+ atSelectionLimit,
507
+ primaryColor,
508
+ getThumbUrl,
509
+ reduceMotion,
510
+ handleCellPress,
511
+ handleCellLongPress,
512
+ t,
513
+ ],
514
+ );
482
515
 
483
- const keyExtractor = useCallback((item: FileMetadata) => item.id, []);
516
+ const keyExtractor = useCallback((item: FileMetadata) => item.id, []);
484
517
 
485
- const listFooter = useMemo(() => {
486
- if (!loadingMore) return null;
487
- return (
488
- <View className="py-space-16 items-center">
489
- <ActivityIndicator size="small" color="#FFFFFF" />
490
- </View>
491
- );
492
- }, [loadingMore]);
518
+ const listFooter = useMemo(() => {
519
+ if (!loadingMore) return null;
520
+ return (
521
+ <View className="py-space-16 items-center">
522
+ <ActivityIndicator size="small" color="#FFFFFF" />
523
+ </View>
524
+ );
525
+ }, [loadingMore]);
493
526
 
494
- const handleEndReached = useCallback(() => {
495
- if (loadingMore || !hasMore) return;
496
- onLoadMore();
497
- }, [loadingMore, hasMore, onLoadMore]);
527
+ const handleEndReached = useCallback(() => {
528
+ if (loadingMore || !hasMore) return;
529
+ onLoadMore();
530
+ }, [loadingMore, hasMore, onLoadMore]);
498
531
 
499
- return (
500
- // Measured wrapper: `style`-only (no className) so RN-Web fires onLayout.
501
- // `rootStyle` is placement-aware — a `maxHeight` cap that gives the
502
- // FlatList a bounded scroll region while letting a short grid hug its
503
- // content (see the `rootStyle` derivation). It must NOT carry a className
504
- // (that can suppress web `onLayout`).
505
- <View style={rootStyle} onLayout={onRootLayout}>
506
- {/* `min-h-0` lets this flex child shrink below its content on web so
532
+ return (
533
+ // Measured wrapper: `style`-only (no className) so RN-Web fires onLayout.
534
+ // `rootStyle` is placement-aware — a `maxHeight` cap that gives the
535
+ // FlatList a bounded scroll region while letting a short grid hug its
536
+ // content (see the `rootStyle` derivation). It must NOT carry a className
537
+ // (that can suppress web `onLayout`).
538
+ <View style={rootStyle} onLayout={onRootLayout}>
539
+ {/* `min-h-0` lets this flex child shrink below its content on web so
507
540
  the FlatList gets a bounded scroll region inside the height-capped
508
541
  root (the CSS flexbox `min-height:auto` trap; a no-op on native,
509
542
  where Yoga already defaults min-height to 0). */}
510
- <View className="flex-1 min-h-0 bg-black">
511
- {/* Photo grid — full-bleed black canvas CONTENT under the shared
543
+ <View className="flex-1 min-h-0 bg-black">
544
+ {/* Photo grid — full-bleed black canvas CONTENT under the shared
512
545
  Dialog nav bar (the Dialog reserves the bar's height above this
513
546
  and its gradient fades a little further down; the top padding
514
547
  clears that fade). */}
515
- {isEmpty && loadError ? (
516
- /* Terminal load failure — a DISTINCT error surface (not the
548
+ {isEmpty && loadError ? (
549
+ /* Terminal load failure — a DISTINCT error surface (not the
517
550
  empty state), centered in the immersive frame. Retry re-runs
518
551
  the list query. */
519
- <View className="flex-1 items-center justify-center">
520
- <FileLibraryError
521
- title={t('fileManagement.loadError.title')}
522
- description={t('fileManagement.loadError.description')}
523
- retryLabel={t('fileManagement.retry')}
524
- onRetry={onRetry}
525
- iconColor="#FF6B6B"
526
- titleColor="#FFFFFF"
527
- descriptionColor="rgba(255,255,255,0.7)"
528
- />
529
- </View>
530
- ) : isEmpty && loading ? (
531
- /* Loading skeleton — the picker's OWN shape: shimmer tiles laid
552
+ <View className="flex-1 items-center justify-center">
553
+ <FileLibraryError
554
+ title={t('fileManagement.loadError.title')}
555
+ description={t('fileManagement.loadError.description')}
556
+ retryLabel={t('fileManagement.retry')}
557
+ onRetry={onRetry}
558
+ iconColor="#FF6B6B"
559
+ titleColor="#FFFFFF"
560
+ descriptionColor="rgba(255,255,255,0.7)"
561
+ />
562
+ </View>
563
+ ) : isEmpty && loading ? (
564
+ /* Loading skeleton — the picker's OWN shape: shimmer tiles laid
532
565
  out with the SAME placement-aware geometry the real grid uses
533
566
  (`computePhotoGridLayout(effectiveWidth)`), edge-to-edge under
534
567
  the floating bar. `flexWrap` breaks rows exactly at `columns`
535
568
  because the last tile in each row carries no right margin (a
536
569
  full row + gutters fits the measured width by construction). */
537
- <View
538
- style={{ flexDirection: 'row', flexWrap: 'wrap', pointerEvents: 'none' }}
539
- accessibilityElementsHidden
540
- importantForAccessibility="no-hide-descendants"
541
- >
542
- {Array.from({ length: skeletonTileCount }, (_, index) => (
543
- <Skeleton.Box
544
- // biome-ignore lint/suspicious/noArrayIndexKey: fixed-size skeleton grid, order never changes
545
- key={`skeleton-${index}`}
546
- width={cellSize}
547
- height={cellSize}
548
- borderRadius={CELL_CORNER_RADIUS}
549
- style={{
550
- marginRight: (index + 1) % columns === 0 ? 0 : gutter,
551
- marginBottom: gutter,
552
- backgroundColor: SKELETON_TILE_COLOR,
553
- }}
554
- />
555
- ))}
556
- </View>
557
- ) : isEmpty ? (
558
- <View className="flex-1 items-center justify-center px-space-32">
559
- <View className="opacity-30 mb-space-16">
560
- <MaterialCommunityIcons name="image-outline" size={64} color="#FFFFFF" />
561
- </View>
562
- <Text className="text-white text-[17px] font-semibold text-center mb-1.5">
563
- {t('fileManagement.photoPicker.emptyTitle')}
564
- </Text>
565
- <Text className="text-white text-[14px] font-normal text-center opacity-70 mb-space-24">
566
- {t('fileManagement.photoPicker.emptySubtitle')}
567
- </Text>
568
- {isOwner && allowUpload && (
569
- <TouchableOpacity
570
- className="flex-row items-center gap-space-8 px-[22px] py-space-12 rounded-full"
571
- style={{ backgroundColor: primaryColor }}
572
- onPress={onUpload}
573
- disabled={uploading || isPickingDocument}
574
- accessibilityRole="button"
575
- accessibilityLabel={t('fileManagement.uploadPhoto')}
576
- accessibilityState={{ busy: uploading || isPickingDocument }}
577
- >
578
- {(uploading || isPickingDocument) ? (
579
- <ActivityIndicator size="small" color="#FFFFFF" />
580
- ) : (
581
- <>
582
- <Ionicons name="cloud-upload" size={18} color="#FFFFFF" />
583
- <Text className="text-white text-[15px] font-semibold">
584
- {t('fileManagement.uploadPhoto')}
585
- </Text>
586
- </>
587
- )}
588
- </TouchableOpacity>
589
- )}
590
- </View>
570
+ <View
571
+ style={{ flexDirection: 'row', flexWrap: 'wrap', pointerEvents: 'none' }}
572
+ accessibilityElementsHidden
573
+ importantForAccessibility="no-hide-descendants"
574
+ >
575
+ {Array.from({ length: skeletonTileCount }, (_, index) => (
576
+ <Skeleton.Box
577
+ // biome-ignore lint/suspicious/noArrayIndexKey: fixed-size skeleton grid, order never changes
578
+ key={`skeleton-${index}`}
579
+ width={cellSize}
580
+ height={cellSize}
581
+ borderRadius={CELL_CORNER_RADIUS}
582
+ style={{
583
+ marginRight: (index + 1) % columns === 0 ? 0 : gutter,
584
+ marginBottom: gutter,
585
+ backgroundColor: SKELETON_TILE_COLOR,
586
+ }}
587
+ />
588
+ ))}
589
+ </View>
590
+ ) : isEmpty ? (
591
+ <View className="flex-1 items-center justify-center px-space-32">
592
+ <View className="opacity-30 mb-space-16">
593
+ <MaterialCommunityIcons name="image-outline" size={64} color="#FFFFFF" />
594
+ </View>
595
+ <Text className="text-white text-[17px] font-semibold text-center mb-1.5">
596
+ {t('fileManagement.photoPicker.emptyTitle')}
597
+ </Text>
598
+ <Text className="text-white text-[14px] font-normal text-center opacity-70 mb-space-24">
599
+ {t('fileManagement.photoPicker.emptySubtitle')}
600
+ </Text>
601
+ {isOwner && allowUpload && (
602
+ <TouchableOpacity
603
+ className="flex-row items-center gap-space-8 px-[22px] py-space-12 rounded-full"
604
+ style={{ backgroundColor: primaryColor }}
605
+ onPress={onUpload}
606
+ disabled={uploading || isPickingDocument}
607
+ accessibilityRole="button"
608
+ accessibilityLabel={t('fileManagement.uploadPhoto')}
609
+ accessibilityState={{ busy: uploading || isPickingDocument }}
610
+ >
611
+ {uploading || isPickingDocument ? (
612
+ <ActivityIndicator size="small" color="#FFFFFF" />
591
613
  ) : (
592
- <FlatList
593
- key={`cols-${columns}`}
594
- data={photos}
595
- renderItem={renderItem}
596
- keyExtractor={keyExtractor}
597
- numColumns={columns}
598
- className="flex-1 min-h-0"
599
- contentContainerClassName="pb-space-24"
600
- showsVerticalScrollIndicator={false}
601
- refreshControl={
602
- <RefreshControl
603
- refreshing={refreshing}
604
- onRefresh={onRefresh}
605
- tintColor="#FFFFFF"
606
- colors={[primaryColor]}
607
- progressViewOffset={FLOATING_NAV_BAR_HEIGHT}
608
- />
609
- }
610
- onEndReached={handleEndReached}
611
- onEndReachedThreshold={0.4}
612
- ListFooterComponent={listFooter}
613
- removeClippedSubviews={Platform.OS !== 'web'}
614
- initialNumToRender={Math.max(12, columns * 6)}
615
- windowSize={9}
616
- />
614
+ <>
615
+ <Ionicons name="cloud-upload" size={18} color="#FFFFFF" />
616
+ <Text className="text-white text-[15px] font-semibold">
617
+ {t('fileManagement.uploadPhoto')}
618
+ </Text>
619
+ </>
617
620
  )}
618
- </View>
619
- </View>
620
- );
621
+ </TouchableOpacity>
622
+ )}
623
+ </View>
624
+ ) : (
625
+ <FlatList
626
+ key={`cols-${columns}`}
627
+ data={photos}
628
+ renderItem={renderItem}
629
+ keyExtractor={keyExtractor}
630
+ numColumns={columns}
631
+ className="flex-1 min-h-0"
632
+ contentContainerClassName="pb-space-24"
633
+ showsVerticalScrollIndicator={false}
634
+ refreshControl={
635
+ <RefreshControl
636
+ refreshing={refreshing}
637
+ onRefresh={onRefresh}
638
+ tintColor="#FFFFFF"
639
+ colors={[primaryColor]}
640
+ progressViewOffset={FLOATING_NAV_BAR_HEIGHT}
641
+ />
642
+ }
643
+ onEndReached={handleEndReached}
644
+ onEndReachedThreshold={0.4}
645
+ ListFooterComponent={listFooter}
646
+ removeClippedSubviews={Platform.OS !== 'web'}
647
+ initialNumToRender={Math.max(12, columns * 6)}
648
+ windowSize={9}
649
+ />
650
+ )}
651
+ </View>
652
+ </View>
653
+ );
621
654
  };
622
655
 
623
656
  export default PhotoPickerView;