@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.
- package/lib/commonjs/assets/assets/icons/OxyServices.tsx +42 -40
- package/lib/commonjs/assets/assets/illustrations/HighFive.tsx +58 -31
- package/lib/commonjs/assets/icons/OxyServices.js.map +1 -1
- package/lib/commonjs/assets/illustrations/HighFive.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/notifications/deviceNotifications.js +8 -4
- package/lib/commonjs/notifications/deviceNotifications.js.map +1 -1
- package/lib/commonjs/ui/analytics/productAnalytics.js.map +1 -1
- package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/commonjs/ui/components/BenefitList.js.map +1 -1
- package/lib/commonjs/ui/components/BloomLocaleBridge.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/FollowTargetButton.js +1 -1
- package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/commonjs/ui/components/LanguageBridge.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthPrompt.js.map +1 -1
- package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/commonjs/ui/components/PeableButton.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileSummaryCard.js +1 -1
- package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -1
- package/lib/commonjs/ui/components/RequireOxyAuth.js.map +1 -1
- package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
- package/lib/commonjs/ui/components/SurfaceHeaderAction.js.map +1 -1
- package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/types.js.map +1 -1
- package/lib/commonjs/ui/components/feedback/constants.js.map +1 -1
- package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/commonjs/ui/components/followButtonAccessibility.js.map +1 -1
- package/lib/commonjs/ui/components/followRules.js.map +1 -1
- package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js.map +1 -1
- package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -1
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/commonjs/ui/components/oauthNavigation.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/constants.js.map +1 -1
- package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
- package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/InlineCommonsQr.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyPasswordPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxySignInPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/ReauthStep.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/accountFlowParts.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/artwork.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/signInFlowStore.js.map +1 -1
- package/lib/commonjs/ui/components/styles/overlay.js.map +1 -1
- package/lib/commonjs/ui/components/styles/shadow.js.map +1 -1
- package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
- package/lib/commonjs/ui/components/utils/hasTouchHandler.js.map +1 -1
- package/lib/commonjs/ui/components/utils/roundLayoutSize.js.map +1 -1
- package/lib/commonjs/ui/components/utils/splitStyles.js.map +1 -1
- package/lib/commonjs/ui/constants/spacing.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/isolatedOAuthSession.js.map +1 -1
- package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/commonjs/ui/hooks/accountDialogSnapshot.js.map +1 -1
- package/lib/commonjs/ui/hooks/accountQueryPersistence.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/persistedQueryCache.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useFileQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/usePersonalPlans.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/userCache.js +38 -38
- package/lib/commonjs/ui/hooks/queries/userCache.js.map +1 -1
- package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
- package/lib/commonjs/ui/hooks/useDeviceSwitcher.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFileFiltering.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
- package/lib/commonjs/ui/hooks/useI18n.js.map +1 -1
- package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/commonjs/ui/hooks/useReduceMotion.js.map +1 -1
- package/lib/commonjs/ui/hooks/useResolvedFileUrls.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
- package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSurfaceFrameWidth.js.map +1 -1
- package/lib/commonjs/ui/icons/Ionicons.js.map +1 -1
- package/lib/commonjs/ui/icons/MaterialCommunityIcons.js.map +1 -1
- package/lib/commonjs/ui/icons/decorativeIconSet.js.map +1 -1
- package/lib/commonjs/ui/isFrontend.js.map +1 -1
- package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/navigation/surfaces.js.map +1 -1
- package/lib/commonjs/ui/oauth/applicationSessionLane.js.map +1 -1
- package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
- package/lib/commonjs/ui/oauth/browserBridge.js.map +1 -1
- package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -1
- package/lib/commonjs/ui/oauth/nativeAuthTransport.js.map +1 -1
- package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -1
- package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
- package/lib/commonjs/ui/oauth/oauthPopupMessages.js.map +1 -1
- package/lib/commonjs/ui/runtime/createOxyRuntime.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSecurityPanelScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/DomainsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +2 -5
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +3 -3
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserListScreen.js +1 -1
- package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +7 -7
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/photoGridLayout.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/shared.js.map +1 -1
- package/lib/commonjs/ui/screens/linkFormat.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/commonjs/ui/server.js.map +1 -1
- package/lib/commonjs/ui/session/authStore.js.map +1 -1
- package/lib/commonjs/ui/session/backgroundSession.js.map +1 -1
- package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
- package/lib/commonjs/ui/session/deviceCredentialTracker.js.map +1 -1
- package/lib/commonjs/ui/session/identityBinding.js.map +1 -1
- package/lib/commonjs/ui/session/sharedDeviceCredentialStore.js.map +1 -1
- package/lib/commonjs/ui/session/tokenLossRecovery.js.map +1 -1
- package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
- package/lib/commonjs/ui/stores/assetStore.js.map +1 -1
- package/lib/commonjs/ui/stores/followStore.js.map +1 -1
- package/lib/commonjs/ui/utils/accountDeletionHandoff.js.map +1 -1
- package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
- package/lib/commonjs/ui/utils/clipboard.native.js +23 -6
- package/lib/commonjs/ui/utils/clipboard.native.js.map +1 -1
- package/lib/commonjs/ui/utils/commonsStoreLinks.js.map +1 -1
- package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
- package/lib/commonjs/ui/utils/fileManagement.js +24 -24
- package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
- package/lib/commonjs/ui/utils/iconNames.js.map +1 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
- package/lib/commonjs/utils/hookUtils.js +2 -4
- package/lib/commonjs/utils/hookUtils.js.map +1 -1
- package/lib/module/assets/assets/icons/OxyServices.tsx +42 -40
- package/lib/module/assets/assets/illustrations/HighFive.tsx +58 -31
- package/lib/module/assets/icons/OxyServices.js.map +1 -1
- package/lib/module/assets/illustrations/HighFive.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/notifications/deviceNotifications.js +8 -4
- package/lib/module/notifications/deviceNotifications.js.map +1 -1
- package/lib/module/ui/analytics/productAnalytics.js.map +1 -1
- package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/module/ui/client.js.map +1 -1
- package/lib/module/ui/components/BenefitList.js.map +1 -1
- package/lib/module/ui/components/BloomLocaleBridge.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/FollowTargetButton.js +1 -1
- package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/module/ui/components/LanguageBridge.js.map +1 -1
- package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/module/ui/components/OxyAuthPrompt.js.map +1 -1
- package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +1 -1
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/module/ui/components/PeableButton.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/ui/components/ProfileSummaryCard.js +1 -1
- package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -1
- package/lib/module/ui/components/RequireOxyAuth.js.map +1 -1
- package/lib/module/ui/components/SettingsIcon.js.map +1 -1
- package/lib/module/ui/components/SurfaceHeaderAction.js.map +1 -1
- package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
- package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/module/ui/components/authChooser/types.js.map +1 -1
- package/lib/module/ui/components/feedback/constants.js.map +1 -1
- package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/module/ui/components/followButtonAccessibility.js.map +1 -1
- package/lib/module/ui/components/followRules.js.map +1 -1
- package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -1
- package/lib/module/ui/components/logo/LogoText.js.map +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/module/ui/components/oauthNavigation.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/module/ui/components/payment/constants.js.map +1 -1
- package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
- package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/module/ui/components/signIn/InlineCommonsQr.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyAccountPicker.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyPasswordPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxySignInPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxySignUpPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/ReauthStep.js.map +1 -1
- package/lib/module/ui/components/signIn/accountFlowParts.js.map +1 -1
- package/lib/module/ui/components/signIn/artwork.js.map +1 -1
- package/lib/module/ui/components/signIn/signInFlowStore.js.map +1 -1
- package/lib/module/ui/components/styles/overlay.js.map +1 -1
- package/lib/module/ui/components/styles/shadow.js.map +1 -1
- package/lib/module/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
- package/lib/module/ui/components/utils/hasTouchHandler.js.map +1 -1
- package/lib/module/ui/components/utils/roundLayoutSize.js.map +1 -1
- package/lib/module/ui/components/utils/splitStyles.js.map +1 -1
- package/lib/module/ui/constants/spacing.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/isolatedOAuthSession.js.map +1 -1
- package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/module/ui/hooks/accountDialogSnapshot.js.map +1 -1
- package/lib/module/ui/hooks/accountQueryPersistence.js.map +1 -1
- package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/persistedQueryCache.js.map +1 -1
- package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useFileQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/usePersonalPlans.js.map +1 -1
- package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/userCache.js +38 -38
- package/lib/module/ui/hooks/queries/userCache.js.map +1 -1
- package/lib/module/ui/hooks/queryClient.js.map +1 -1
- package/lib/module/ui/hooks/useAssets.js.map +1 -1
- package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
- package/lib/module/ui/hooks/useAuth.js.map +1 -1
- package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
- package/lib/module/ui/hooks/useDeviceSwitcher.js.map +1 -1
- package/lib/module/ui/hooks/useFileFiltering.js.map +1 -1
- package/lib/module/ui/hooks/useFollow.js.map +1 -1
- package/lib/module/ui/hooks/useI18n.js.map +1 -1
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useReduceMotion.js.map +1 -1
- package/lib/module/ui/hooks/useResolvedFileUrls.js.map +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
- package/lib/module/ui/hooks/useStorage.js.map +1 -1
- package/lib/module/ui/hooks/useSurfaceFrameWidth.js.map +1 -1
- package/lib/module/ui/icons/Ionicons.js.map +1 -1
- package/lib/module/ui/icons/MaterialCommunityIcons.js.map +1 -1
- package/lib/module/ui/icons/decorativeIconSet.js.map +1 -1
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/isFrontend.js.map +1 -1
- package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/navigation/surfaces.js.map +1 -1
- package/lib/module/ui/oauth/applicationSessionLane.js.map +1 -1
- package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
- package/lib/module/ui/oauth/browserBridge.js.map +1 -1
- package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -1
- package/lib/module/ui/oauth/nativeAuthTransport.js.map +1 -1
- package/lib/module/ui/oauth/oauthHandshake.js.map +1 -1
- package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
- package/lib/module/ui/oauth/oauthPopupMessages.js.map +1 -1
- package/lib/module/ui/runtime/createOxyRuntime.js.map +1 -1
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSecurityPanelScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
- package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/DomainsScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +2 -5
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +3 -3
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/module/ui/screens/UserListScreen.js +1 -1
- package/lib/module/ui/screens/UserListScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +7 -7
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/photoGridLayout.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/shared.js.map +1 -1
- package/lib/module/ui/screens/linkFormat.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/module/ui/server.js.map +1 -1
- package/lib/module/ui/session/authStore.js.map +1 -1
- package/lib/module/ui/session/backgroundSession.js.map +1 -1
- package/lib/module/ui/session/createSessionClient.js.map +1 -1
- package/lib/module/ui/session/deviceCredentialTracker.js.map +1 -1
- package/lib/module/ui/session/identityBinding.js.map +1 -1
- package/lib/module/ui/session/sharedDeviceCredentialStore.js.map +1 -1
- package/lib/module/ui/session/tokenLossRecovery.js.map +1 -1
- package/lib/module/ui/session/tokenTransport.js.map +1 -1
- package/lib/module/ui/stores/assetStore.js.map +1 -1
- package/lib/module/ui/stores/followStore.js.map +1 -1
- package/lib/module/ui/utils/accountDeletionHandoff.js.map +1 -1
- package/lib/module/ui/utils/avatarUtils.js.map +1 -1
- package/lib/module/ui/utils/clipboard.native.js +23 -6
- package/lib/module/ui/utils/clipboard.native.js.map +1 -1
- package/lib/module/ui/utils/commonsStoreLinks.js.map +1 -1
- package/lib/module/ui/utils/errorHandlers.js.map +1 -1
- package/lib/module/ui/utils/fileManagement.js +25 -25
- package/lib/module/ui/utils/fileManagement.js.map +1 -1
- package/lib/module/ui/utils/iconNames.js.map +1 -1
- package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/module/ui/utils/userUtils.js.map +1 -1
- package/lib/module/utils/hookUtils.js +2 -4
- package/lib/module/utils/hookUtils.js.map +1 -1
- package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts.map +1 -1
- package/lib/typescript/commonjs/assets/illustrations/HighFive.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -4
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +8 -4
- package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/analytics/productAnalytics.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/BenefitList.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/LanguageBridge.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthPrompt.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/PeableButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/RequireOxyAuth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/feedback/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/feedback/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/feedback/useFeedbackForm.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/followButtonAccessibility.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/followRules.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/logo/LogoText.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/oauthNavigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/paymentStyles.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -6
- package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/ReauthStep.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/artwork.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/signInFlowStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/styles/overlay.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/utils/hasTouchHandler.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/utils/roundLayoutSize.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/utils/splitStyles.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/isolatedOAuthSession.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/persistedQueryCache.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts +2 -2
- package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts +5 -5
- package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useFollow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useI18n.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSettingToggle.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useStorage.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/useStorage.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSurfaceFrameWidth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/decorativeIconSet.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/isFrontend.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/applicationSessionLane.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/browserBridge.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/runtime/createOxyRuntime.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/DomainsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/photoGridLayout.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/linkFormat.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/deviceCredentialTracker.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/tokenLossRecovery.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/stores/assetStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/stores/followStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/fileManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/surfaceScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/avatarUtils.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/clipboard.native.d.ts +16 -5
- package/lib/typescript/commonjs/ui/utils/clipboard.native.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/commonsStoreLinks.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/errorHandlers.d.ts +1 -1
- package/lib/typescript/commonjs/ui/utils/errorHandlers.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +4 -4
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +1 -1
- package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
- package/lib/typescript/module/assets/icons/OxyServices.d.ts.map +1 -1
- package/lib/typescript/module/assets/illustrations/HighFive.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -4
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/notifications/deviceNotifications.d.ts +8 -4
- package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -1
- package/lib/typescript/module/ui/analytics/productAnalytics.d.ts.map +1 -1
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/module/ui/client.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/BenefitList.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FollowTargetButton.d.ts +1 -1
- package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/LanguageBridge.d.ts +1 -1
- package/lib/typescript/module/ui/components/LanguageBridge.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthPrompt.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/PeableButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/RequireOxyAuth.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SurfaceScreen.d.ts +1 -1
- package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/feedback/constants.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/feedback/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/feedback/useFeedbackForm.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/followButtonAccessibility.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/followRules.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/logo/LogoText.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/oauthNavigation.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/constants.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/paymentStyles.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/payment/types.d.ts +6 -6
- package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/ReauthStep.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/artwork.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/signInFlowStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/styles/overlay.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/utils/hasTouchHandler.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/utils/roundLayoutSize.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/utils/splitStyles.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/isolatedOAuthSession.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/persistedQueryCache.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts +2 -2
- package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/userCache.d.ts +5 -5
- package/lib/typescript/module/ui/hooks/queries/userCache.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useFollow.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useI18n.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSettingToggle.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useStorage.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/useStorage.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSurfaceFrameWidth.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/decorativeIconSet.d.ts.map +1 -1
- package/lib/typescript/module/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/isFrontend.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/surfaces.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/applicationSessionLane.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/browserBridge.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/nativeAuthTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/runtime/createOxyRuntime.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/DomainsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/photoGridLayout.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/linkFormat.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/server.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/deviceCredentialTracker.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/tokenLossRecovery.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/stores/assetStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/stores/followStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/fileManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/surfaceScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/avatarUtils.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/clipboard.native.d.ts +16 -5
- package/lib/typescript/module/ui/utils/clipboard.native.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/commonsStoreLinks.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/errorHandlers.d.ts +1 -1
- package/lib/typescript/module/ui/utils/errorHandlers.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/fileManagement.d.ts +4 -4
- package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +1 -1
- package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
- package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
- package/lib/typescript/types/expo-crypto.d.ts +2 -4
- package/lib/typescript/types/expo-document-picker.d.ts +27 -28
- package/lib/typescript/types/expo-image-picker.d.ts +27 -27
- package/lib/typescript/types/expo-secure-store.d.ts +11 -4
- package/lib/typescript/types/express.d.ts +22 -7
- package/package.json +4 -5
- package/src/assets/icons/OxyServices.tsx +42 -40
- package/src/assets/illustrations/HighFive.tsx +58 -31
- package/src/index.ts +99 -86
- package/src/notifications/deviceNotifications.ts +9 -7
- package/src/types/expo-crypto.d.ts +2 -4
- package/src/types/expo-document-picker.d.ts +27 -28
- package/src/types/expo-image-picker.d.ts +27 -27
- package/src/types/expo-secure-store.d.ts +11 -4
- package/src/types/express.d.ts +22 -7
- package/src/ui/analytics/productAnalytics.tsx +5 -5
- package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +91 -29
- package/src/ui/boot/runProviderColdBoot.ts +12 -3
- package/src/ui/client.ts +31 -31
- package/src/ui/components/BenefitList.tsx +78 -77
- package/src/ui/components/BloomLocaleBridge.tsx +3 -3
- package/src/ui/components/FollowButton.tsx +88 -84
- package/src/ui/components/FollowTargetButton.tsx +15 -6
- package/src/ui/components/LanguageBridge.tsx +24 -19
- package/src/ui/components/OxyAuthChooser.tsx +17 -3
- package/src/ui/components/OxyAuthPrompt.tsx +79 -98
- package/src/ui/components/OxyConsentScreen.tsx +51 -12
- package/src/ui/components/OxyProvider.tsx +189 -182
- package/src/ui/components/OxySignInButton.tsx +415 -405
- package/src/ui/components/OxySignInRequestSurface.tsx +7 -1
- package/src/ui/components/PeableButton.tsx +57 -49
- package/src/ui/components/ProfileButton.tsx +158 -109
- package/src/ui/components/ProfileSummaryCard.tsx +64 -64
- package/src/ui/components/RequireOxyAuth.tsx +15 -3
- package/src/ui/components/SettingsIcon.tsx +24 -19
- package/src/ui/components/SurfaceHeaderAction.tsx +6 -1
- package/src/ui/components/SurfaceScreen.tsx +21 -16
- package/src/ui/components/__tests__/BloomLocaleBridge.test.tsx +1 -1
- package/src/ui/components/__tests__/LanguageBridge.test.tsx +15 -5
- package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +21 -11
- package/src/ui/components/__tests__/followButtonAccessibility.test.tsx +42 -15
- package/src/ui/components/__tests__/followTargetButton.test.ts +23 -20
- package/src/ui/components/authChooser/AccountsMenuView.tsx +70 -56
- package/src/ui/components/authChooser/TroubleDisclosure.tsx +6 -1
- package/src/ui/components/authChooser/requestSurfaces.tsx +3 -1
- package/src/ui/components/authChooser/types.ts +6 -1
- package/src/ui/components/feedback/constants.ts +36 -12
- package/src/ui/components/feedback/types.ts +30 -30
- package/src/ui/components/feedback/useFeedbackForm.ts +38 -35
- package/src/ui/components/fileManagement/FileDetailsModal.tsx +86 -92
- package/src/ui/components/fileManagement/FileViewer.tsx +362 -338
- package/src/ui/components/fileManagement/UploadPreview.tsx +134 -127
- package/src/ui/components/followButtonAccessibility.ts +6 -2
- package/src/ui/components/followRules.ts +6 -2
- package/src/ui/components/icon/FAIRWalletIcon.tsx +47 -35
- package/src/ui/components/logo/LogoText.tsx +6 -1
- package/src/ui/components/modals/DeleteAccountModal.tsx +89 -83
- package/src/ui/components/oauthNavigation.ts +54 -56
- package/src/ui/components/payment/PaymentDetailsStep.tsx +269 -201
- package/src/ui/components/payment/PaymentMethodStep.tsx +88 -68
- package/src/ui/components/payment/PaymentReviewStep.tsx +119 -102
- package/src/ui/components/payment/PaymentSuccessStep.tsx +48 -48
- package/src/ui/components/payment/PaymentSummaryStep.tsx +167 -124
- package/src/ui/components/payment/constants.ts +38 -23
- package/src/ui/components/payment/paymentStyles.ts +252 -251
- package/src/ui/components/payment/types.ts +24 -24
- package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +207 -183
- package/src/ui/components/photogrid/__tests__/chunkPhotos.test.ts +32 -33
- package/src/ui/components/signIn/InlineCommonsQr.tsx +14 -6
- package/src/ui/components/signIn/OxyAccountPicker.tsx +19 -4
- package/src/ui/components/signIn/OxyAuthScreen.tsx +21 -11
- package/src/ui/components/signIn/OxyAuthenticatorPanel.tsx +47 -13
- package/src/ui/components/signIn/OxyDeleteAccountPanel.tsx +14 -4
- package/src/ui/components/signIn/OxyLinkCommonsPanel.tsx +69 -15
- package/src/ui/components/signIn/OxyPasswordPanel.tsx +19 -4
- package/src/ui/components/signIn/OxySignInPanel.tsx +74 -21
- package/src/ui/components/signIn/OxySignUpPanel.tsx +60 -12
- package/src/ui/components/signIn/ReauthStep.tsx +26 -5
- package/src/ui/components/signIn/accountFlowParts.tsx +45 -16
- package/src/ui/components/signIn/artwork.ts +3 -1
- package/src/ui/components/signIn/signInFlowStore.ts +5 -1
- package/src/ui/components/styles/overlay.tsx +10 -11
- package/src/ui/components/styles/shadow.tsx +59 -59
- package/src/ui/components/surfaces/ActionSheetSurface.tsx +51 -61
- package/src/ui/components/utils/hasTouchHandler.tsx +3 -13
- package/src/ui/components/utils/roundLayoutSize.ts +1 -2
- package/src/ui/components/utils/splitStyles.ts +2 -5
- package/src/ui/constants/spacing.ts +8 -9
- package/src/ui/context/OxyContext.tsx +324 -140
- package/src/ui/context/__tests__/commitSessionFlow.test.ts +8 -3
- package/src/ui/context/__tests__/isolatedOAuthSession.test.ts +11 -3
- package/src/ui/context/commitSessionFlow.ts +15 -3
- package/src/ui/context/hooks/useAuthOperations.ts +54 -16
- package/src/ui/context/isolatedOAuthSession.ts +4 -1
- package/src/ui/context/oxyContextTypes.ts +26 -9
- package/src/ui/context/useOxyAccountGraph.ts +26 -4
- package/src/ui/hooks/accountDialogSnapshot.ts +3 -1
- package/src/ui/hooks/accountQueryPersistence.ts +16 -5
- package/src/ui/hooks/mutations/mutationFactory.ts +11 -6
- package/src/ui/hooks/mutations/useAccountMutations.ts +77 -54
- package/src/ui/hooks/mutations/useServicesMutations.ts +10 -11
- package/src/ui/hooks/persistedQueryCache.ts +10 -2
- package/src/ui/hooks/queries/__tests__/userCache.test.ts +72 -17
- package/src/ui/hooks/queries/__tests__/userCacheClear.test.ts +18 -23
- package/src/ui/hooks/queries/paymentTypes.ts +2 -2
- package/src/ui/hooks/queries/queryKeys.ts +5 -5
- package/src/ui/hooks/queries/useAccountQueries.ts +12 -17
- package/src/ui/hooks/queries/useFileQueries.ts +88 -92
- package/src/ui/hooks/queries/usePaymentQueries.ts +13 -26
- package/src/ui/hooks/queries/usePersonalPlans.ts +14 -6
- package/src/ui/hooks/queries/useSecurityQueries.ts +16 -29
- package/src/ui/hooks/queries/useServicesQueries.ts +17 -23
- package/src/ui/hooks/queries/userCache.ts +249 -270
- package/src/ui/hooks/queryClient.ts +9 -5
- package/src/ui/hooks/useAssets.ts +166 -160
- package/src/ui/hooks/useAsyncAction.ts +92 -91
- package/src/ui/hooks/useAuth.ts +45 -42
- package/src/ui/hooks/useAvatarPicker.ts +2 -5
- package/src/ui/hooks/useDeviceManagement.ts +0 -2
- package/src/ui/hooks/useDeviceSwitcher.ts +73 -68
- package/src/ui/hooks/useFileFiltering.ts +2 -2
- package/src/ui/hooks/useFollow.ts +139 -67
- package/src/ui/hooks/useFollowTarget.ts +11 -11
- package/src/ui/hooks/useI18n.ts +7 -2
- package/src/ui/hooks/useProfileEditing.ts +167 -155
- package/src/ui/hooks/useQueryClient.ts +2 -3
- package/src/ui/hooks/useReduceMotion.ts +21 -21
- package/src/ui/hooks/useResolvedFileUrls.ts +5 -1
- package/src/ui/hooks/useSessionManagement.ts +3 -1
- package/src/ui/hooks/useSettingToggle.ts +122 -114
- package/src/ui/hooks/useStorage.ts +1 -4
- package/src/ui/hooks/useSurfaceFrameWidth.ts +3 -1
- package/src/ui/icons/Ionicons.ts +1 -5
- package/src/ui/icons/MaterialCommunityIcons.ts +1 -5
- package/src/ui/icons/__tests__/decorativeIconSet.test.tsx +3 -1
- package/src/ui/icons/decorativeIconSet.ts +13 -2
- package/src/ui/index.ts +4 -4
- package/src/ui/isFrontend.ts +3 -2
- package/src/ui/navigation/__tests__/getSurfaceConfig.test.ts +83 -83
- package/src/ui/navigation/__tests__/surfaceNavStack.test.ts +8 -2
- package/src/ui/navigation/bottomSheetManager.ts +1 -1
- package/src/ui/navigation/routes.ts +90 -88
- package/src/ui/navigation/surfaces.ts +7 -6
- package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +18 -11
- package/src/ui/oauth/__tests__/browserBridge.test.ts +108 -21
- package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +9 -6
- package/src/ui/oauth/__tests__/explicitOAuthConsent.test.ts +222 -241
- package/src/ui/oauth/__tests__/nativeAuthTransport.test.ts +118 -35
- package/src/ui/oauth/__tests__/oauthBearerCommit.http.test.ts +60 -18
- package/src/ui/oauth/__tests__/oauthPopup.test.ts +2 -7
- package/src/ui/oauth/__tests__/oauthPopupMessages.test.ts +9 -7
- package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +4 -5
- package/src/ui/oauth/applicationSessionLane.ts +12 -3
- package/src/ui/oauth/browserAuthTransport.ts +15 -7
- package/src/ui/oauth/browserBridge.ts +22 -5
- package/src/ui/oauth/completeOAuthCode.ts +9 -6
- package/src/ui/oauth/nativeAuthTransport.ts +73 -20
- package/src/ui/oauth/oauthHandshake.ts +6 -1
- package/src/ui/oauth/oauthPopup.ts +6 -4
- package/src/ui/oauth/oauthPopupMessages.ts +3 -4
- package/src/ui/oauth/types.ts +1 -3
- package/src/ui/runtime/createOxyRuntime.ts +21 -4
- package/src/ui/screens/AccountMembersScreen.tsx +274 -204
- package/src/ui/screens/AccountSecurityPanelScreen.tsx +3 -1
- package/src/ui/screens/AccountSettingsScreen.tsx +133 -113
- package/src/ui/screens/AccountVerificationScreen.tsx +176 -161
- package/src/ui/screens/AppInfoScreen.tsx +360 -304
- package/src/ui/screens/AvatarCropScreen.tsx +977 -988
- package/src/ui/screens/ChangeAvatarScreen.tsx +257 -253
- package/src/ui/screens/ConnectedAppsScreen.tsx +117 -130
- package/src/ui/screens/CreateAccountScreen.tsx +173 -129
- package/src/ui/screens/DomainsScreen.tsx +157 -140
- package/src/ui/screens/EditProfileFieldScreen.tsx +693 -663
- package/src/ui/screens/EditProfileScreen.tsx +106 -100
- package/src/ui/screens/FileManagementScreen.tsx +1505 -1162
- package/src/ui/screens/HelpSupportScreen.tsx +88 -75
- package/src/ui/screens/HistoryViewScreen.tsx +143 -102
- package/src/ui/screens/LanguageSelectorScreen.tsx +206 -199
- package/src/ui/screens/LearnMoreUsernamesScreen.tsx +92 -110
- package/src/ui/screens/LegalDocumentsScreen.tsx +134 -193
- package/src/ui/screens/ManageAccountScreen.tsx +649 -871
- package/src/ui/screens/NotificationsScreen.tsx +111 -143
- package/src/ui/screens/PaymentGatewayScreen.tsx +229 -244
- package/src/ui/screens/PreferencesScreen.tsx +153 -196
- package/src/ui/screens/PrivacySettingsScreen.tsx +509 -351
- package/src/ui/screens/ProfileScreen.tsx +416 -319
- package/src/ui/screens/SearchSettingsScreen.tsx +100 -98
- package/src/ui/screens/UserLinksScreen.tsx +48 -43
- package/src/ui/screens/UserListScreen.tsx +53 -30
- package/src/ui/screens/WelcomeNewUserScreen.tsx +430 -334
- package/src/ui/screens/__tests__/linkFormat.test.ts +58 -62
- package/src/ui/screens/__tests__/photoGridLayout.test.ts +43 -47
- package/src/ui/screens/fileManagement/FileLibraryError.tsx +33 -27
- package/src/ui/screens/fileManagement/FileListSection.tsx +96 -87
- package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +508 -475
- package/src/ui/screens/fileManagement/UploadBar.tsx +26 -16
- package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +514 -490
- package/src/ui/screens/fileManagement/photoGridLayout.ts +13 -13
- package/src/ui/screens/fileManagement/shared.ts +40 -38
- package/src/ui/screens/linkFormat.ts +14 -14
- package/src/ui/screens/trust/TrustAboutScreen.tsx +53 -51
- package/src/ui/screens/trust/TrustCenterScreen.tsx +156 -214
- package/src/ui/screens/trust/TrustFAQScreen.tsx +60 -67
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +183 -183
- package/src/ui/screens/trust/TrustRewardsScreen.tsx +495 -494
- package/src/ui/screens/trust/TrustRulesScreen.tsx +84 -85
- package/src/ui/server.ts +12 -15
- package/src/ui/session/__tests__/authStore.test.ts +6 -1
- package/src/ui/session/__tests__/createSessionClient.test.ts +22 -8
- package/src/ui/session/__tests__/sharedDeviceCredentialStore.test.ts +24 -6
- package/src/ui/session/__tests__/tokenLossRecovery.test.ts +3 -1
- package/src/ui/session/__tests__/tokenTransport.test.ts +9 -2
- package/src/ui/session/authStore.ts +7 -1
- package/src/ui/session/backgroundSession.ts +4 -3
- package/src/ui/session/createSessionClient.ts +17 -5
- package/src/ui/session/deviceCredentialTracker.ts +12 -6
- package/src/ui/session/identityBinding.ts +6 -1
- package/src/ui/session/sharedDeviceCredentialStore.ts +15 -4
- package/src/ui/session/tokenLossRecovery.ts +24 -10
- package/src/ui/session/tokenTransport.ts +5 -1
- package/src/ui/stores/__tests__/followStore.test.ts +20 -7
- package/src/ui/stores/assetStore.ts +209 -207
- package/src/ui/stores/followStore.ts +80 -39
- package/src/ui/stores/followTargetStore.ts +1 -1
- package/src/ui/types/fileManagement.ts +48 -49
- package/src/ui/types/navigation.ts +168 -168
- package/src/ui/types/surfaceScreen.ts +4 -1
- package/src/ui/utils/__tests__/deviceSessionTitle.test.ts +4 -2
- package/src/ui/utils/accountDeletionHandoff.ts +14 -3
- package/src/ui/utils/avatarUtils.ts +7 -6
- package/src/ui/utils/clipboard.native.ts +23 -6
- package/src/ui/utils/commonsStoreLinks.ts +2 -1
- package/src/ui/utils/errorHandlers.ts +7 -12
- package/src/ui/utils/fileManagement.ts +92 -103
- package/src/ui/utils/iconNames.ts +60 -60
- package/src/ui/utils/sessionHelpers.ts +1 -6
- package/src/ui/utils/storageHelpers.ts +0 -1
- package/src/ui/utils/userUtils.ts +2 -6
- package/src/utils/hookUtils.ts +77 -65
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
-
import {
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
216
|
+
const delay = Math.min(enterIndex * STAGGER_PER_CELL_MS, MAX_TOTAL_STAGGER_MS);
|
|
196
217
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
>
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
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
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
410
|
+
const effectiveWidth = gridWidth > 0 ? gridWidth : windowWidth;
|
|
411
|
+
const { columns, cellSize, gutter } = useMemo(
|
|
412
|
+
() => computePhotoGridLayout(effectiveWidth),
|
|
413
|
+
[effectiveWidth],
|
|
414
|
+
);
|
|
388
415
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
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
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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
|
-
|
|
440
|
+
const hasAnySelection = selectedIds.size > 0;
|
|
414
441
|
|
|
415
|
-
|
|
416
|
-
|
|
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
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
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
|
-
|
|
516
|
+
const keyExtractor = useCallback((item: FileMetadata) => item.id, []);
|
|
484
517
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
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
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
527
|
+
const handleEndReached = useCallback(() => {
|
|
528
|
+
if (loadingMore || !hasMore) return;
|
|
529
|
+
onLoadMore();
|
|
530
|
+
}, [loadingMore, hasMore, onLoadMore]);
|
|
498
531
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
511
|
-
|
|
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
|
-
|
|
516
|
-
|
|
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
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
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
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
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
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
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
|
-
|
|
619
|
-
|
|
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;
|