@oxy.so/services 3.0.0 → 4.0.0
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/LICENSE +675 -201
- package/NOTICE +215 -3
- package/README.md +1 -3
- package/lib/commonjs/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/icons/manifest.json +5 -11
- package/lib/commonjs/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/commonjs/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/commonjs/assets/fonts/icons/manifest.json +5 -11
- package/lib/commonjs/ui/components/FollowButton.js +15 -28
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/FollowTargetButton.js +17 -13
- package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthPrompt.js +3 -2
- package/lib/commonjs/ui/components/OxyAuthPrompt.js.map +1 -1
- package/lib/commonjs/ui/components/OxyConsentScreen.js +4 -2
- package/lib/commonjs/ui/components/OxyConsentScreen.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 +2 -1
- package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js +67 -267
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileSummaryCard.js +2 -2
- package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -1
- package/lib/commonjs/ui/components/SurfaceHeaderAction.js +9 -49
- package/lib/commonjs/ui/components/SurfaceHeaderAction.js.map +1 -1
- package/lib/commonjs/ui/components/SurfaceScreen.js +3 -2
- package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +2 -1
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +2 -1
- package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/SignUpView.js +4 -2
- package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js +2 -1
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +20 -14
- package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +48 -85
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +35 -31
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +9 -6
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +22 -19
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +6 -3
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +6 -3
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +7 -5
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +20 -17
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js +2 -1
- package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js +5 -3
- package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
- package/lib/commonjs/ui/icons/subsetGlyphMaps.js +0 -6
- package/lib/commonjs/ui/icons/subsetGlyphMaps.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountMembersScreen.js +36 -60
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +2 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +16 -7
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AvatarCropScreen.js +7 -6
- package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js +2 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +18 -9
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +99 -200
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +8 -9
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +19 -8
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +2 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +20 -10
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +4 -2
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +2 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserListScreen.js +31 -33
- package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +22 -11
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +7 -18
- package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +7 -16
- package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +6 -6
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +23 -66
- package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +17 -8
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +2 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +3 -2
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/module/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/module/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/module/assets/assets/fonts/icons/manifest.json +5 -11
- package/lib/module/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/module/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/module/assets/fonts/icons/manifest.json +5 -11
- package/lib/module/ui/components/FollowButton.js +15 -28
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/FollowTargetButton.js +15 -12
- package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/module/ui/components/OxyAuthPrompt.js +2 -1
- package/lib/module/ui/components/OxyAuthPrompt.js.map +1 -1
- package/lib/module/ui/components/OxyConsentScreen.js +4 -2
- package/lib/module/ui/components/OxyConsentScreen.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 +2 -1
- package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js +70 -269
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/ui/components/ProfileSummaryCard.js +2 -2
- package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -1
- package/lib/module/ui/components/SurfaceHeaderAction.js +8 -48
- package/lib/module/ui/components/SurfaceHeaderAction.js.map +1 -1
- package/lib/module/ui/components/SurfaceScreen.js +2 -1
- package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js +2 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/module/ui/components/authChooser/SignInEntryView.js +2 -1
- package/lib/module/ui/components/authChooser/SignInEntryView.js.map +1 -1
- package/lib/module/ui/components/authChooser/SignUpView.js +4 -2
- package/lib/module/ui/components/authChooser/SignUpView.js.map +1 -1
- package/lib/module/ui/components/authChooser/requestSurfaces.js +2 -1
- package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileDetailsModal.js +12 -6
- package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +38 -75
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/fileManagement/UploadPreview.js +31 -27
- package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js +6 -3
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +6 -3
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js +6 -3
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js +6 -3
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +4 -2
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +6 -3
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js +2 -1
- package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/module/ui/components/surfaces/ActionSheetSurface.js +4 -2
- package/lib/module/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
- package/lib/module/ui/icons/subsetGlyphMaps.js +0 -6
- package/lib/module/ui/icons/subsetGlyphMaps.js.map +1 -1
- package/lib/module/ui/screens/AccountMembersScreen.js +37 -61
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +2 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +15 -7
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/AvatarCropScreen.js +2 -1
- package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js +2 -1
- package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +18 -9
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +91 -192
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +9 -10
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +18 -7
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +2 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +20 -10
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +4 -2
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +2 -1
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/UserListScreen.js +32 -34
- package/lib/module/ui/screens/UserListScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +22 -11
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileLibraryError.js +6 -17
- package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileListSection.js +5 -14
- package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +3 -3
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/UploadBar.js +24 -66
- package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustAboutScreen.js +16 -7
- package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +2 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js +2 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthPrompt.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +1 -20
- 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/SurfaceHeaderAction.d.ts +1 -5
- package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SurfaceScreen.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/modals/DeleteAccountModal.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/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts +0 -6
- package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FileManagementScreen.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/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts +0 -2
- 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 +1 -14
- package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.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/TrustRulesScreen.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.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthPrompt.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInButton.d.ts +1 -1
- package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileButton.d.ts +1 -20
- 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/SurfaceHeaderAction.d.ts +1 -5
- package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SurfaceScreen.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/modals/DeleteAccountModal.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/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/module/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts +0 -6
- package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FileManagementScreen.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/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts +0 -2
- 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 +1 -14
- package/lib/typescript/module/ui/screens/fileManagement/UploadBar.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/TrustRulesScreen.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/src/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/src/assets/fonts/icons/manifest.json +5 -11
- package/src/ui/components/FollowButton.tsx +14 -29
- package/src/ui/components/FollowTargetButton.tsx +14 -12
- package/src/ui/components/OxyAuthPrompt.tsx +2 -7
- package/src/ui/components/OxyConsentScreen.tsx +2 -2
- package/src/ui/components/OxySignInButton.tsx +2 -2
- package/src/ui/components/OxySignInRequestSurface.tsx +1 -1
- package/src/ui/components/ProfileButton.tsx +30 -297
- package/src/ui/components/ProfileSummaryCard.tsx +1 -2
- package/src/ui/components/SurfaceHeaderAction.tsx +7 -49
- package/src/ui/components/SurfaceScreen.tsx +2 -1
- package/src/ui/components/authChooser/AccountsMenuView.tsx +1 -1
- package/src/ui/components/authChooser/SignInEntryView.tsx +1 -1
- package/src/ui/components/authChooser/SignUpView.tsx +2 -2
- package/src/ui/components/authChooser/requestSurfaces.tsx +1 -1
- package/src/ui/components/fileManagement/FileDetailsModal.tsx +8 -6
- package/src/ui/components/fileManagement/FileViewer.tsx +21 -50
- package/src/ui/components/fileManagement/UploadPreview.tsx +12 -29
- package/src/ui/components/modals/DeleteAccountModal.tsx +4 -3
- package/src/ui/components/payment/PaymentDetailsStep.tsx +4 -3
- package/src/ui/components/payment/PaymentMethodStep.tsx +4 -3
- package/src/ui/components/payment/PaymentReviewStep.tsx +4 -3
- package/src/ui/components/payment/PaymentSuccessStep.tsx +3 -2
- package/src/ui/components/payment/PaymentSummaryStep.tsx +4 -3
- package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +2 -1
- package/src/ui/components/surfaces/ActionSheetSurface.tsx +3 -2
- package/src/ui/icons/subsetGlyphMaps.ts +0 -6
- package/src/ui/screens/AccountMembersScreen.tsx +17 -65
- package/src/ui/screens/AccountSettingsScreen.tsx +1 -1
- package/src/ui/screens/AccountVerificationScreen.tsx +14 -7
- package/src/ui/screens/AvatarCropScreen.tsx +2 -10
- package/src/ui/screens/CreateAccountScreen.tsx +1 -1
- package/src/ui/screens/FeedbackScreen.tsx +9 -9
- package/src/ui/screens/FileManagementScreen.tsx +37 -184
- package/src/ui/screens/LanguageSelectorScreen.tsx +5 -13
- package/src/ui/screens/LearnMoreUsernamesScreen.tsx +17 -7
- package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +10 -10
- package/src/ui/screens/PrivacySettingsScreen.tsx +2 -2
- package/src/ui/screens/ProfileScreen.tsx +1 -1
- package/src/ui/screens/UserListScreen.tsx +17 -44
- package/src/ui/screens/WelcomeNewUserScreen.tsx +11 -11
- package/src/ui/screens/fileManagement/FileLibraryError.tsx +6 -14
- package/src/ui/screens/fileManagement/FileListSection.tsx +4 -16
- package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +2 -13
- package/src/ui/screens/fileManagement/UploadBar.tsx +17 -56
- package/src/ui/screens/trust/TrustAboutScreen.tsx +16 -7
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
- package/src/ui/screens/trust/TrustRulesScreen.tsx +2 -1
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +0 -61
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +0 -1
- package/lib/commonjs/ui/components/internal/PinInput.js +0 -118
- package/lib/commonjs/ui/components/internal/PinInput.js.map +0 -1
- package/lib/module/ui/components/fileManagement/AnimatedButton.js +0 -55
- package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +0 -1
- package/lib/module/ui/components/internal/PinInput.js +0 -113
- package/lib/module/ui/components/internal/PinInput.js.map +0 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +0 -17
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts +0 -23
- package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +0 -17
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/internal/PinInput.d.ts +0 -23
- package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +0 -1
- package/src/ui/components/fileManagement/AnimatedButton.tsx +0 -64
- package/src/ui/components/internal/PinInput.tsx +0 -123
|
@@ -5,13 +5,11 @@ import type {
|
|
|
5
5
|
TextStyle,
|
|
6
6
|
StyleProp,
|
|
7
7
|
} from 'react-native';
|
|
8
|
-
import { ActivityIndicator } from 'react-native';
|
|
9
8
|
import { useOxy } from '../context/OxyContext';
|
|
10
9
|
import { toast } from '@oxy.so/bloom/toast';
|
|
11
|
-
import {
|
|
10
|
+
import { FollowButton as BloomFollowButton } from '@oxy.so/bloom/media-header';
|
|
12
11
|
import { useFollow, useFollowForButton } from '../hooks/useFollow';
|
|
13
12
|
import { useFollowStore } from '../stores/followStore';
|
|
14
|
-
import { useTheme } from '@oxy.so/bloom/theme';
|
|
15
13
|
import type { OxyServices, BulkFollowResult, BulkUnfollowResult } from '@oxy.so/core';
|
|
16
14
|
import { useShallow } from 'zustand/react/shallow';
|
|
17
15
|
|
|
@@ -69,7 +67,6 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
69
67
|
showLoadingState = true,
|
|
70
68
|
preventParentActions = true,
|
|
71
69
|
}: SingleFollowButtonProps & { oxyServices: OxyServices }) {
|
|
72
|
-
const { colors } = useTheme();
|
|
73
70
|
|
|
74
71
|
const {
|
|
75
72
|
isFollowing,
|
|
@@ -111,22 +108,16 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
111
108
|
const showSpinner = showLoadingState && isBusy;
|
|
112
109
|
|
|
113
110
|
return (
|
|
114
|
-
<
|
|
115
|
-
|
|
111
|
+
<BloomFollowButton
|
|
112
|
+
following={showFollowing}
|
|
113
|
+
onFollowChange={() => { void handlePress(); }}
|
|
116
114
|
size={size}
|
|
117
|
-
|
|
115
|
+
loading={showSpinner}
|
|
118
116
|
disabled={disabled || isBusy}
|
|
119
117
|
style={style}
|
|
120
118
|
textStyle={textStyle}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
size="small"
|
|
124
|
-
color={showFollowing ? colors.text : colors.primaryForeground}
|
|
125
|
-
/>
|
|
126
|
-
) : undefined}
|
|
127
|
-
>
|
|
128
|
-
{showSpinner ? undefined : (isKnown ? (isFollowing ? 'Following' : 'Follow') : undefined)}
|
|
129
|
-
</Button>
|
|
119
|
+
label={isKnown || showSpinner ? 'Follow' : ''}
|
|
120
|
+
/>
|
|
130
121
|
);
|
|
131
122
|
});
|
|
132
123
|
|
|
@@ -145,7 +136,6 @@ const FollowButtonMultiInner = memo(function FollowButtonMultiInner({
|
|
|
145
136
|
showLoadingState = true,
|
|
146
137
|
preventParentActions = true,
|
|
147
138
|
}: MultiFollowButtonProps) {
|
|
148
|
-
const { colors } = useTheme();
|
|
149
139
|
const follow = useFollow(userIds);
|
|
150
140
|
const followAllUsers = 'followAllUsers' in follow ? follow.followAllUsers : undefined;
|
|
151
141
|
const unfollowAllUsers = 'unfollowAllUsers' in follow ? follow.unfollowAllUsers : undefined;
|
|
@@ -238,22 +228,17 @@ const FollowButtonMultiInner = memo(function FollowButtonMultiInner({
|
|
|
238
228
|
const showSpinner = showLoadingState && isLoading;
|
|
239
229
|
|
|
240
230
|
return (
|
|
241
|
-
<
|
|
242
|
-
|
|
231
|
+
<BloomFollowButton
|
|
232
|
+
following={allFollowing}
|
|
233
|
+
onFollowChange={() => { void handlePress(); }}
|
|
234
|
+
label={followAllLabel}
|
|
235
|
+
followingLabel={followedAllLabel}
|
|
243
236
|
size={size}
|
|
244
|
-
|
|
237
|
+
loading={showSpinner}
|
|
245
238
|
disabled={disabled || isLoading}
|
|
246
239
|
style={style}
|
|
247
240
|
textStyle={textStyle}
|
|
248
|
-
|
|
249
|
-
<ActivityIndicator
|
|
250
|
-
size="small"
|
|
251
|
-
color={allFollowing ? colors.text : colors.primaryForeground}
|
|
252
|
-
/>
|
|
253
|
-
) : undefined}
|
|
254
|
-
>
|
|
255
|
-
{showSpinner ? undefined : (allFollowing ? followedAllLabel : followAllLabel)}
|
|
256
|
-
</Button>
|
|
241
|
+
/>
|
|
257
242
|
);
|
|
258
243
|
});
|
|
259
244
|
|
|
@@ -35,8 +35,13 @@ import { memo, useCallback, useMemo } from 'react';
|
|
|
35
35
|
import type { FollowApplicationMode, FollowStatus } from '@oxy.so/contracts';
|
|
36
36
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
37
37
|
import { View } from 'react-native';
|
|
38
|
+
import { FollowButton as BloomFollowButton } from '@oxy.so/bloom/media-header';
|
|
38
39
|
import { Button } from '@oxy.so/bloom/button';
|
|
39
|
-
|
|
40
|
+
// Per glyph, never `@oxy.so/bloom/icons`. That barrel re-exports all 461 Remix
|
|
41
|
+
// glyphs and Metro does not tree-shake, so one import of it here re-ships every
|
|
42
|
+
// glyph — 313,123 B, measured — to every app in this package's graph, and no
|
|
43
|
+
// consumer can opt out of what a dependency asks for.
|
|
44
|
+
import { RiArrowDownSLine as ChevronDown } from '@oxy.so/bloom/icons/RiArrowDownSLine';
|
|
40
45
|
import {
|
|
41
46
|
DropdownMenu,
|
|
42
47
|
DropdownMenuContent,
|
|
@@ -376,18 +381,15 @@ export const FollowTargetButton = memo(function FollowTargetButton({
|
|
|
376
381
|
);
|
|
377
382
|
|
|
378
383
|
const primary = (
|
|
379
|
-
<
|
|
380
|
-
|
|
384
|
+
<BloomFollowButton
|
|
385
|
+
following={isFollowing}
|
|
386
|
+
label={isFollowing ? text.idle : label}
|
|
387
|
+
followingLabel={label}
|
|
381
388
|
size={size}
|
|
382
|
-
// Unknown is not "not following": the button stays inert until the first
|
|
383
|
-
// read settles rather than inviting a follow that may already exist.
|
|
384
389
|
disabled={disabled || isUnknown}
|
|
385
|
-
loading={isPending}
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
>
|
|
389
|
-
{label}
|
|
390
|
-
</Button>
|
|
390
|
+
loading={isPending || isUnknown}
|
|
391
|
+
onFollowChange={() => void handlePrimary()}
|
|
392
|
+
/>
|
|
391
393
|
);
|
|
392
394
|
|
|
393
395
|
if (!showOptions || menuItems.length === 0) {
|
|
@@ -406,7 +408,7 @@ export const FollowTargetButton = memo(function FollowTargetButton({
|
|
|
406
408
|
*/}
|
|
407
409
|
<DropdownMenuTrigger asChild disabled={disabled || isUnknown}>
|
|
408
410
|
<Button
|
|
409
|
-
|
|
411
|
+
appearance="subtle" tone="support"
|
|
410
412
|
size={size === 'large' ? 'large' : 'small'}
|
|
411
413
|
icon={<ChevronDown width={16} />}
|
|
412
414
|
disabled={disabled || isUnknown}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
Text,
|
|
5
|
-
View,
|
|
6
|
-
type StyleProp,
|
|
7
|
-
type ViewStyle,
|
|
8
|
-
} from 'react-native';
|
|
2
|
+
import { StyleSheet, View, type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
9
4
|
import { useTheme } from '@oxy.so/bloom/theme';
|
|
10
5
|
import { useShallow } from 'zustand/react/shallow';
|
|
11
6
|
import { useAuthStore } from '../stores/authStore';
|
|
@@ -429,7 +429,7 @@ export function OxyConsentScreen({
|
|
|
429
429
|
<View style={styles.actions}>
|
|
430
430
|
<Button
|
|
431
431
|
testID="consent-allow"
|
|
432
|
-
|
|
432
|
+
appearance="solid" tone="accent"
|
|
433
433
|
onPress={handleAllow}
|
|
434
434
|
disabled={busy}
|
|
435
435
|
loading={busy}
|
|
@@ -439,7 +439,7 @@ export function OxyConsentScreen({
|
|
|
439
439
|
</Button>
|
|
440
440
|
<Button
|
|
441
441
|
testID="consent-deny"
|
|
442
|
-
|
|
442
|
+
appearance="plain" tone="neutral"
|
|
443
443
|
onPress={onDeny}
|
|
444
444
|
disabled={busy}
|
|
445
445
|
style={styles.actionButton}
|
|
@@ -65,7 +65,7 @@ export interface OxySignInButtonProps {
|
|
|
65
65
|
*/
|
|
66
66
|
action?: OxySignInButtonAction;
|
|
67
67
|
|
|
68
|
-
/** `
|
|
68
|
+
/** `md` (36 tall, 300 wide) or `sm` (32 × 250). @default 'md' */
|
|
69
69
|
size?: SocialButtonSize;
|
|
70
70
|
|
|
71
71
|
/** Fill the container's width instead of the fixed 300 / 250. */
|
|
@@ -177,7 +177,7 @@ export const OxySignInButton: React.FC<OxySignInButtonProps> = ({
|
|
|
177
177
|
variant = 'default',
|
|
178
178
|
appearance,
|
|
179
179
|
action = 'signIn',
|
|
180
|
-
size = '
|
|
180
|
+
size = 'md',
|
|
181
181
|
fullWidth = false,
|
|
182
182
|
iconOnly = false,
|
|
183
183
|
onPress,
|
|
@@ -150,7 +150,7 @@ export const OxySignInRequestSurface: React.FC<OxySignInRequestSurfaceProps> = (
|
|
|
150
150
|
return (
|
|
151
151
|
<View style={styles.centeredBlock}>
|
|
152
152
|
{onRetry ? (
|
|
153
|
-
<Button
|
|
153
|
+
<Button appearance="solid" tone="accent" onPress={onRetry} style={styles.primaryButton}>
|
|
154
154
|
{t('common.actions.tryAgain')}
|
|
155
155
|
</Button>
|
|
156
156
|
) : null}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
import { useCallback, useEffect, useMemo
|
|
2
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
3
3
|
import {
|
|
4
|
-
StyleSheet,
|
|
5
|
-
Platform,
|
|
6
4
|
type StyleProp,
|
|
7
5
|
type ViewStyle,
|
|
8
6
|
} from 'react-native';
|
|
9
|
-
import { View
|
|
10
|
-
import
|
|
7
|
+
import { View } from 'react-native-css/components';
|
|
8
|
+
import * as Icons from '@oxy.so/bloom/icons';
|
|
9
|
+
import { Button } from '@oxy.so/bloom/button';
|
|
11
10
|
import { Avatar } from '@oxy.so/bloom/avatar';
|
|
12
11
|
import * as Skeleton from '@oxy.so/bloom/skeleton';
|
|
13
12
|
import { Text } from '@oxy.so/bloom/typography';
|
|
@@ -19,35 +18,6 @@ import { useI18n } from '../hooks/useI18n';
|
|
|
19
18
|
import { registerAccountDialogConsumerHooks } from '../navigation/accountDialogManager';
|
|
20
19
|
import type { AccountDialogMenuItem } from '../navigation/accountDialogManager';
|
|
21
20
|
|
|
22
|
-
const isWeb = Platform.OS === 'web';
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Web-only Bluesky-style hover animation timings, mirrored from
|
|
26
|
-
* `social-app/src/view/shell/desktop/LeftNav.tsx`. The row background and the
|
|
27
|
-
* name/handle/chevron opacity cross-fade quickly; the avatar shrink+slide is
|
|
28
|
-
* slower and more deliberate. A short delay on the LEAVE transition keeps the
|
|
29
|
-
* row from flickering when the pointer crosses a child boundary.
|
|
30
|
-
*/
|
|
31
|
-
const BG_TRANSITION_MS = 150;
|
|
32
|
-
const AVATAR_TRANSITION_MS = 250;
|
|
33
|
-
const OPACITY_TRANSITION_MS = 150;
|
|
34
|
-
const LEAVE_DELAY_MS = 50;
|
|
35
|
-
|
|
36
|
-
/** Shrunk-avatar scale on hover, matching Bluesky's `scale: 2/3`. */
|
|
37
|
-
const ACTIVE_AVATAR_SCALE = 2 / 3;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Reads the OS "reduce motion" preference on web. Guards `window`/`matchMedia`
|
|
41
|
-
* so it is safe during SSR and on native (where it is never called). When
|
|
42
|
-
* reduced motion is on, the avatar transform snaps instead of transitioning.
|
|
43
|
-
*/
|
|
44
|
-
const prefersReducedMotion = (): boolean => {
|
|
45
|
-
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
21
|
export interface ProfileButtonProps {
|
|
52
22
|
/**
|
|
53
23
|
* Expanded row (avatar + name + handle + chevron) when `true` (default), or a
|
|
@@ -82,26 +52,7 @@ export interface ProfileButtonProps {
|
|
|
82
52
|
style?: StyleProp<ViewStyle>;
|
|
83
53
|
}
|
|
84
54
|
|
|
85
|
-
/**
|
|
86
|
-
* Self-contained sidebar account trigger, modeled on Bluesky's ProfileCard and
|
|
87
|
-
* the Oxy inbox's `MailboxDrawer` footer. Pressing it opens the unified
|
|
88
|
-
* {@link OxyAccountDialogScreen} — the single account switcher + sign-in surface — via
|
|
89
|
-
* `useOxy().openAccountDialog`.
|
|
90
|
-
*
|
|
91
|
-
* Three auth states from {@link useAuth}:
|
|
92
|
-
* - **Undetermined** (`!isAuthResolved || isPrivateApiPending`): a neutral
|
|
93
|
-
* avatar-sized skeleton circle, no press.
|
|
94
|
-
* - **Signed in**: a pressable row — Bloom `Avatar` + display name + `@handle`
|
|
95
|
-
* + a chevron. Press opens the dialog on its `accounts` view.
|
|
96
|
-
* - **Signed out**: a "Sign in" row that calls `useAuth().signIn()` (which opens
|
|
97
|
-
* the dialog on its `signin` view).
|
|
98
|
-
*
|
|
99
|
-
* Styling uses react-native `StyleSheet` + the Bloom theme (via `useTheme`) so
|
|
100
|
-
* the layout renders identically in EVERY consumer — including apps that do not
|
|
101
|
-
* use NativeWind (e.g. the accounts app). Only the web hover animation keeps
|
|
102
|
-
* dynamic inline `style` (the CSS transition/transform values), which is what
|
|
103
|
-
* the `react-native-web-style.d.ts` augmentation exists for.
|
|
104
|
-
*/
|
|
55
|
+
/** Account business binding over Bloom's shared Button and Avatar. */
|
|
105
56
|
const ProfileButton: React.FC<ProfileButtonProps> = ({
|
|
106
57
|
expanded = true,
|
|
107
58
|
avatarSize,
|
|
@@ -123,11 +74,6 @@ const ProfileButton: React.FC<ProfileButtonProps> = ({
|
|
|
123
74
|
const { colors } = useTheme();
|
|
124
75
|
const { t, locale } = useI18n();
|
|
125
76
|
|
|
126
|
-
// Web-only hover/focus tracking for the Bluesky-style reveal animation.
|
|
127
|
-
// Native has no hover, so these stay false and the row renders statically.
|
|
128
|
-
const [hovered, setHovered] = useState(false);
|
|
129
|
-
const [focused, setFocused] = useState(false);
|
|
130
|
-
|
|
131
77
|
const resolvedAvatarSize = avatarSize ?? (expanded ? 40 : 32);
|
|
132
78
|
|
|
133
79
|
const openDialog = useCallback(() => {
|
|
@@ -165,248 +111,35 @@ const ProfileButton: React.FC<ProfileButtonProps> = ({
|
|
|
165
111
|
);
|
|
166
112
|
}
|
|
167
113
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
style={[styles.row, expanded && styles.rowExpanded, style]}
|
|
175
|
-
onPress={() => { void signIn(); }}
|
|
176
|
-
accessibilityRole="button"
|
|
177
|
-
accessibilityLabel={signInLabel}
|
|
178
|
-
>
|
|
179
|
-
<View
|
|
180
|
-
style={[
|
|
181
|
-
styles.avatarBadge,
|
|
182
|
-
{
|
|
183
|
-
width: resolvedAvatarSize,
|
|
184
|
-
height: resolvedAvatarSize,
|
|
185
|
-
backgroundColor: colors.backgroundSecondary,
|
|
186
|
-
},
|
|
187
|
-
]}
|
|
188
|
-
>
|
|
189
|
-
<MaterialCommunityIcons
|
|
190
|
-
name="login"
|
|
191
|
-
size={Math.round(resolvedAvatarSize * 0.5)}
|
|
192
|
-
color={colors.icon}
|
|
193
|
-
/>
|
|
194
|
-
</View>
|
|
195
|
-
{expanded ? (
|
|
196
|
-
<Text
|
|
197
|
-
style={[styles.signInLabel, { color: colors.text }]}
|
|
198
|
-
numberOfLines={1}
|
|
199
|
-
>
|
|
200
|
-
{signInLabel}
|
|
201
|
-
</Text>
|
|
202
|
-
) : null}
|
|
203
|
-
</Pressable>
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// ── Signed in: avatar + identity + chevron. ─────────────────────────────
|
|
208
|
-
const displayName =
|
|
209
|
-
user?.name?.displayName ??
|
|
210
|
-
getNormalizedUserHandle(user) ??
|
|
211
|
-
getAccountDisplayName(null, locale);
|
|
212
|
-
const handle = getAccountFallbackHandle(user);
|
|
213
|
-
const handleLine = handle ? `@${handle}` : null;
|
|
214
|
-
|
|
215
|
-
const avatarNode = (
|
|
216
|
-
<Avatar
|
|
217
|
-
source={avatarUrl}
|
|
218
|
-
variant="thumb"
|
|
219
|
-
name={displayName}
|
|
220
|
-
size={resolvedAvatarSize}
|
|
221
|
-
/>
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
// `active` combines hover and keyboard focus — exactly like Bluesky's
|
|
225
|
-
// `state.hovered || state.focused`. Only web ever sets these, so on native
|
|
226
|
-
// the row renders statically.
|
|
227
|
-
const active = hovered || focused;
|
|
228
|
-
const accountLabel = t('accountSwitcher.switchWhileSignedInAs', { name: displayName });
|
|
229
|
-
|
|
230
|
-
// Web-only pointer/focus handlers. RN-Web forwards `onHoverIn`/`onHoverOut`
|
|
231
|
-
// to the underlying element; native Pressable ignores them harmlessly, but
|
|
232
|
-
// we only attach them on web to keep the native path pristine.
|
|
233
|
-
const webInteractionProps = isWeb
|
|
234
|
-
? {
|
|
235
|
-
onHoverIn: () => setHovered(true),
|
|
236
|
-
onHoverOut: () => setHovered(false),
|
|
237
|
-
onFocus: () => setFocused(true),
|
|
238
|
-
onBlur: () => setFocused(false),
|
|
239
|
-
}
|
|
240
|
-
: undefined;
|
|
241
|
-
|
|
242
|
-
if (!expanded) {
|
|
243
|
-
// Collapsed: avatar-only. On web, hovering just fades a subtle round
|
|
244
|
-
// background behind the avatar — no shrink, no text.
|
|
245
|
-
const collapsedBgStyle: ViewStyle | undefined = isWeb
|
|
246
|
-
? {
|
|
247
|
-
backgroundColor: active ? colors.backgroundSecondary : 'transparent',
|
|
248
|
-
transitionProperty: 'background-color',
|
|
249
|
-
transitionDuration: `${BG_TRANSITION_MS}ms`,
|
|
250
|
-
transitionDelay: active ? '0ms' : `${LEAVE_DELAY_MS}ms`,
|
|
251
|
-
}
|
|
252
|
-
: undefined;
|
|
253
|
-
return (
|
|
254
|
-
<View className={className} style={style}>
|
|
255
|
-
<Pressable
|
|
256
|
-
style={[styles.collapsedTrigger, collapsedBgStyle]}
|
|
257
|
-
onPress={openDialog}
|
|
258
|
-
accessibilityRole="button"
|
|
259
|
-
accessibilityLabel={accountLabel}
|
|
260
|
-
{...webInteractionProps}
|
|
261
|
-
>
|
|
262
|
-
{avatarNode}
|
|
263
|
-
</Pressable>
|
|
264
|
-
</View>
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// ── Expanded row animation ──────────────────────────────────────────────
|
|
269
|
-
// On native everything is statically visible (no hover exists). On web we
|
|
270
|
-
// reproduce Bluesky's reveal: the row fills with a subtle contrast bg, the
|
|
271
|
-
// avatar shrinks + slides left, and the name/handle/actions fade in from
|
|
272
|
-
// behind it. Keeping the identity hidden while inactive is what makes the
|
|
273
|
-
// negative margin intentional instead of an overlap.
|
|
274
|
-
const reducedMotion = isWeb && prefersReducedMotion();
|
|
275
|
-
|
|
276
|
-
// Slide the shrunk avatar left so its visual left edge stays put as it
|
|
277
|
-
// contracts. The avatar loses `size * (1 - scale)` of width; half of that
|
|
278
|
-
// (the left half, since scale is centered) is the offset, plus the row's
|
|
279
|
-
// left padding (8px) so it hugs the row edge like Bluesky's.
|
|
280
|
-
const activeAvatarTranslateX =
|
|
281
|
-
-(resolvedAvatarSize * (1 - ACTIVE_AVATAR_SCALE)) / 2 - 8;
|
|
282
|
-
|
|
283
|
-
const rowStyle: StyleProp<ViewStyle> = isWeb
|
|
284
|
-
? {
|
|
285
|
-
backgroundColor: active ? colors.backgroundSecondary : 'transparent',
|
|
286
|
-
transitionProperty: 'background-color',
|
|
287
|
-
transitionDuration: `${BG_TRANSITION_MS}ms`,
|
|
288
|
-
transitionDelay: active ? '0ms' : `${LEAVE_DELAY_MS}ms`,
|
|
289
|
-
}
|
|
290
|
-
: undefined;
|
|
291
|
-
|
|
292
|
-
const avatarWrapperStyle: ViewStyle | undefined = isWeb
|
|
293
|
-
? {
|
|
294
|
-
zIndex: 10,
|
|
295
|
-
...(reducedMotion
|
|
296
|
-
? {}
|
|
297
|
-
: {
|
|
298
|
-
transitionProperty: 'transform',
|
|
299
|
-
transitionDuration: `${AVATAR_TRANSITION_MS}ms`,
|
|
300
|
-
transitionDelay: active ? '0ms' : `${LEAVE_DELAY_MS}ms`,
|
|
301
|
-
}),
|
|
302
|
-
transform: active
|
|
303
|
-
? [{ scale: ACTIVE_AVATAR_SCALE }, { translateX: activeAvatarTranslateX }]
|
|
304
|
-
: [{ scale: 1 }, { translateX: 0 }],
|
|
305
|
-
}
|
|
306
|
-
: undefined;
|
|
307
|
-
|
|
308
|
-
const identityStyle: ViewStyle | undefined = isWeb
|
|
309
|
-
? {
|
|
310
|
-
marginLeft: -resolvedAvatarSize / 2,
|
|
311
|
-
opacity: active ? 1 : 0,
|
|
312
|
-
transitionProperty: 'opacity',
|
|
313
|
-
transitionDuration: `${OPACITY_TRANSITION_MS}ms`,
|
|
314
|
-
transitionDelay: active ? '0ms' : `${LEAVE_DELAY_MS}ms`,
|
|
315
|
-
}
|
|
316
|
-
: undefined;
|
|
317
|
-
|
|
318
|
-
const actionStyle: ViewStyle | undefined = isWeb
|
|
319
|
-
? {
|
|
320
|
-
opacity: active ? 1 : 0,
|
|
321
|
-
transitionProperty: 'opacity',
|
|
322
|
-
transitionDuration: `${OPACITY_TRANSITION_MS}ms`,
|
|
323
|
-
transitionDelay: active ? '0ms' : `${LEAVE_DELAY_MS}ms`,
|
|
324
|
-
}
|
|
325
|
-
: undefined;
|
|
114
|
+
const signedIn = isAuthenticated && Boolean(user);
|
|
115
|
+
const displayName = signedIn
|
|
116
|
+
? user?.name?.displayName ?? getNormalizedUserHandle(user) ?? getAccountDisplayName(null, locale)
|
|
117
|
+
: t('common.actions.signIn') || 'Sign in';
|
|
118
|
+
const handle = signedIn ? getAccountFallbackHandle(user) : undefined;
|
|
119
|
+
const label = signedIn ? t('accountSwitcher.switchWhileSignedInAs', { name: displayName }) : displayName;
|
|
326
120
|
|
|
327
121
|
return (
|
|
328
|
-
<
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
style={
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
<Text
|
|
346
|
-
style={[styles.handle, { color: colors.textSecondary }]}
|
|
347
|
-
numberOfLines={1}
|
|
348
|
-
>
|
|
349
|
-
{handleLine}
|
|
350
|
-
</Text>
|
|
351
|
-
) : null}
|
|
352
|
-
</View>
|
|
353
|
-
<View style={actionStyle}>
|
|
354
|
-
<MaterialCommunityIcons
|
|
355
|
-
name="dots-horizontal"
|
|
356
|
-
size={18}
|
|
357
|
-
color={colors.textSecondary}
|
|
358
|
-
/>
|
|
122
|
+
<Button
|
|
123
|
+
appearance="plain" tone="neutral"
|
|
124
|
+
className={className}
|
|
125
|
+
accessibilityLabel={label}
|
|
126
|
+
onPress={signedIn ? openDialog : () => { void signIn(); }}
|
|
127
|
+
style={[{ height: resolvedAvatarSize + 16, borderRadius: 9999, paddingLeft: 8, paddingRight: 8, ...(expanded ? { width: '100%' } : { width: resolvedAvatarSize + 16 }) }, style]}
|
|
128
|
+
trailing={
|
|
129
|
+
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 12, ...(expanded ? { flex: 1 } : {}) }}>
|
|
130
|
+
{signedIn ? <Avatar source={avatarUrl} variant="thumb" name={displayName} size={resolvedAvatarSize} />
|
|
131
|
+
: <Icons.RiLoginBoxLine width={resolvedAvatarSize / 2} height={resolvedAvatarSize / 2} color={colors.icon} />}
|
|
132
|
+
{expanded ? <>
|
|
133
|
+
<View style={{ flex: 1, minWidth: 0 }}>
|
|
134
|
+
<Text variant="body-semibold" numberOfLines={1}>{displayName}</Text>
|
|
135
|
+
{handle ? <Text variant="caption-1-regular" numberOfLines={1} style={{ color: colors.textSecondary }}>@{handle}</Text> : null}
|
|
136
|
+
</View>
|
|
137
|
+
{signedIn ? <Icons.RiMoreLine width={18} height={18} color={colors.textSecondary} /> : null}
|
|
138
|
+
</> : null}
|
|
359
139
|
</View>
|
|
360
|
-
|
|
361
|
-
|
|
140
|
+
}
|
|
141
|
+
/>
|
|
362
142
|
);
|
|
363
143
|
};
|
|
364
144
|
|
|
365
|
-
const styles = StyleSheet.create({
|
|
366
|
-
fullWidth: {
|
|
367
|
-
width: '100%',
|
|
368
|
-
},
|
|
369
|
-
// Shared trigger row (`flex-row items-center gap-3 rounded-full px-2 py-2`).
|
|
370
|
-
row: {
|
|
371
|
-
flexDirection: 'row',
|
|
372
|
-
alignItems: 'center',
|
|
373
|
-
gap: 12,
|
|
374
|
-
borderRadius: 9999,
|
|
375
|
-
paddingHorizontal: 8,
|
|
376
|
-
paddingVertical: 8,
|
|
377
|
-
},
|
|
378
|
-
// `w-full` on the expanded row + its signed-out variant.
|
|
379
|
-
rowExpanded: {
|
|
380
|
-
width: '100%',
|
|
381
|
-
},
|
|
382
|
-
// Signed-out login badge (`items-center justify-center rounded-full`).
|
|
383
|
-
avatarBadge: {
|
|
384
|
-
alignItems: 'center',
|
|
385
|
-
justifyContent: 'center',
|
|
386
|
-
borderRadius: 9999,
|
|
387
|
-
},
|
|
388
|
-
// Signed-out label (`flex-1 font-semibold`).
|
|
389
|
-
signInLabel: {
|
|
390
|
-
flex: 1,
|
|
391
|
-
fontWeight: '600',
|
|
392
|
-
},
|
|
393
|
-
// Collapsed avatar-only trigger (`rounded-full`).
|
|
394
|
-
collapsedTrigger: {
|
|
395
|
-
borderRadius: 9999,
|
|
396
|
-
},
|
|
397
|
-
// Identity block (`min-w-0 flex-1`).
|
|
398
|
-
identity: {
|
|
399
|
-
flex: 1,
|
|
400
|
-
minWidth: 0,
|
|
401
|
-
},
|
|
402
|
-
// Display name (`font-bold`).
|
|
403
|
-
displayName: {
|
|
404
|
-
fontWeight: '700',
|
|
405
|
-
},
|
|
406
|
-
// Handle line (`text-xs`).
|
|
407
|
-
handle: {
|
|
408
|
-
fontSize: 12,
|
|
409
|
-
},
|
|
410
|
-
});
|
|
411
|
-
|
|
412
145
|
export default ProfileButton;
|
|
@@ -37,7 +37,6 @@ export interface ProfileSummaryCardProps {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
const cardStyle: ViewStyle = {
|
|
40
|
-
borderRadius: 20,
|
|
41
40
|
marginBottom: 16,
|
|
42
41
|
};
|
|
43
42
|
|
|
@@ -76,7 +75,7 @@ const ProfileSummaryCard: React.FC<ProfileSummaryCardProps> = ({
|
|
|
76
75
|
);
|
|
77
76
|
|
|
78
77
|
return (
|
|
79
|
-
<Card
|
|
78
|
+
<Card appearance="subtle" radius="radius-20" style={cardStyle}>
|
|
80
79
|
<View className="items-center px-space-20 py-space-24">
|
|
81
80
|
{avatarNode}
|
|
82
81
|
<H4 className="text-text" numberOfLines={1}>
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { useTheme } from '@oxy.so/bloom/theme';
|
|
4
|
-
import { PressableScale } from '@oxy.so/bloom/pressable-scale';
|
|
5
|
-
import { Text } from '@oxy.so/bloom/typography';
|
|
2
|
+
import { Button } from '@oxy.so/bloom/button';
|
|
6
3
|
|
|
7
4
|
export interface SurfaceHeaderActionProps {
|
|
8
5
|
/** Button label (e.g. a translated "Save"). */
|
|
@@ -13,48 +10,9 @@ export interface SurfaceHeaderActionProps {
|
|
|
13
10
|
disabled?: boolean;
|
|
14
11
|
}
|
|
15
12
|
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
label,
|
|
23
|
-
onPress,
|
|
24
|
-
loading,
|
|
25
|
-
disabled,
|
|
26
|
-
}) => {
|
|
27
|
-
const { colors } = useTheme();
|
|
28
|
-
const isDisabled = disabled || loading;
|
|
29
|
-
return (
|
|
30
|
-
<PressableScale
|
|
31
|
-
onPress={onPress}
|
|
32
|
-
disabled={isDisabled}
|
|
33
|
-
accessibilityRole="button"
|
|
34
|
-
accessibilityLabel={label}
|
|
35
|
-
style={[styles.button, { backgroundColor: colors.primary, opacity: isDisabled ? 0.5 : 1 }]}
|
|
36
|
-
>
|
|
37
|
-
{loading ? (
|
|
38
|
-
<ActivityIndicator size="small" color={colors.primaryForeground} />
|
|
39
|
-
) : (
|
|
40
|
-
<Text style={[styles.label, { color: colors.primaryForeground }]}>{label}</Text>
|
|
41
|
-
)}
|
|
42
|
-
</PressableScale>
|
|
43
|
-
);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const styles = StyleSheet.create({
|
|
47
|
-
button: {
|
|
48
|
-
height: 36,
|
|
49
|
-
minWidth: 64,
|
|
50
|
-
paddingHorizontal: 14,
|
|
51
|
-
borderRadius: 18,
|
|
52
|
-
alignItems: 'center',
|
|
53
|
-
justifyContent: 'center',
|
|
54
|
-
},
|
|
55
|
-
label: {
|
|
56
|
-
fontSize: 14,
|
|
57
|
-
fontWeight: '600',
|
|
58
|
-
letterSpacing: -0.2,
|
|
59
|
-
},
|
|
60
|
-
});
|
|
13
|
+
/** Header actions share Bloom's sizing, surface, disabled and loading behavior. */
|
|
14
|
+
export const SurfaceHeaderAction: React.FC<SurfaceHeaderActionProps> = ({ label, onPress, loading, disabled }) => (
|
|
15
|
+
<Button size="medium" onPress={onPress} loading={loading} disabled={disabled}>
|
|
16
|
+
{label}
|
|
17
|
+
</Button>
|
|
18
|
+
);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { Suspense, useCallback, useEffect, useMemo, useState, type ErrorInfo } from 'react';
|
|
2
|
-
import { ActivityIndicator, StyleSheet,
|
|
2
|
+
import { ActivityIndicator, StyleSheet, View, useWindowDimensions } from 'react-native';
|
|
3
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
3
4
|
import { useStore } from 'zustand';
|
|
4
5
|
import { useTheme } from '@oxy.so/bloom/theme';
|
|
5
6
|
import {
|
|
@@ -362,7 +362,7 @@ const AccountsMenuView: React.FC<AccountsMenuViewProps> = ({
|
|
|
362
362
|
variant, `small` the compact height; it hugs its label instead of
|
|
363
363
|
spanning the surface. */}
|
|
364
364
|
<Button
|
|
365
|
-
|
|
365
|
+
appearance="subtle" tone="neutral"
|
|
366
366
|
size="small"
|
|
367
367
|
onPress={handlers.onManage}
|
|
368
368
|
accessibilityLabel={manageLabel}
|