@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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { SegmentedControl, SegmentedControlItem, SegmentedControlItemText } from '@oxy.so/bloom/segmented-control';
|
|
1
2
|
import type React from 'react';
|
|
2
3
|
import { useCallback, useMemo, useState } from 'react';
|
|
3
4
|
import {
|
|
4
5
|
View,
|
|
5
|
-
TouchableOpacity,
|
|
6
6
|
ActivityIndicator,
|
|
7
7
|
} from 'react-native';
|
|
8
8
|
import Ionicons from '../icons/Ionicons';
|
|
@@ -291,37 +291,14 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
|
|
|
291
291
|
<Text className="text-caption font-caption text-text-secondary px-space-4">
|
|
292
292
|
{t('accounts.members.invite.roleLabel') || 'Role'}
|
|
293
293
|
</Text>
|
|
294
|
-
<
|
|
295
|
-
{ASSIGNABLE_ROLES.map(
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
key={role}
|
|
300
|
-
accessibilityRole="radio"
|
|
301
|
-
accessibilityState={{ selected }}
|
|
302
|
-
accessibilityLabel={roleLabel(role)}
|
|
303
|
-
onPress={() => setInviteRole(role)}
|
|
304
|
-
activeOpacity={0.7}
|
|
305
|
-
className="px-space-12 py-space-8 rounded-radius-full"
|
|
306
|
-
style={{
|
|
307
|
-
backgroundColor: selected ? colors.primary : colors.card,
|
|
308
|
-
borderWidth: 1,
|
|
309
|
-
borderColor: selected ? colors.primary : colors.border,
|
|
310
|
-
}}
|
|
311
|
-
>
|
|
312
|
-
<Text
|
|
313
|
-
className="text-caption font-semibold"
|
|
314
|
-
style={{ color: selected ? colors.background : colors.text }}
|
|
315
|
-
>
|
|
316
|
-
{roleLabel(role)}
|
|
317
|
-
</Text>
|
|
318
|
-
</TouchableOpacity>
|
|
319
|
-
);
|
|
320
|
-
})}
|
|
321
|
-
</View>
|
|
294
|
+
<SegmentedControl type="radio" label={t('accounts.members.invite.roleLabel') || 'Role'} value={inviteRole} onValueChange={setInviteRole} size="small">
|
|
295
|
+
{ASSIGNABLE_ROLES.map(role => <SegmentedControlItem key={role} value={role}>
|
|
296
|
+
<SegmentedControlItemText>{roleLabel(role)}</SegmentedControlItemText>
|
|
297
|
+
</SegmentedControlItem>)}
|
|
298
|
+
</SegmentedControl>
|
|
322
299
|
|
|
323
300
|
<Button
|
|
324
|
-
|
|
301
|
+
appearance="solid" tone="accent"
|
|
325
302
|
onPress={handleInvite}
|
|
326
303
|
disabled={inviteMutation.isPending || !inviteIdentifier.trim()}
|
|
327
304
|
loading={inviteMutation.isPending}
|
|
@@ -394,35 +371,12 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
|
|
|
394
371
|
|
|
395
372
|
{/* Role chips (editable) or static role label */}
|
|
396
373
|
{canEditThisRole ? (
|
|
397
|
-
<
|
|
398
|
-
{
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
accessibilityRole="radio"
|
|
404
|
-
accessibilityState={{ selected }}
|
|
405
|
-
accessibilityLabel={roleLabel(role)}
|
|
406
|
-
onPress={() => handleChangeRole(member, role)}
|
|
407
|
-
disabled={updateMutation.isPending}
|
|
408
|
-
activeOpacity={0.7}
|
|
409
|
-
className="px-space-12 py-space-4 rounded-radius-full"
|
|
410
|
-
style={{
|
|
411
|
-
backgroundColor: selected ? colors.primary : colors.card,
|
|
412
|
-
borderWidth: 1,
|
|
413
|
-
borderColor: selected ? colors.primary : colors.border,
|
|
414
|
-
}}
|
|
415
|
-
>
|
|
416
|
-
<Text
|
|
417
|
-
className="text-caption font-semibold"
|
|
418
|
-
style={{ color: selected ? colors.background : colors.text }}
|
|
419
|
-
>
|
|
420
|
-
{roleLabel(role)}
|
|
421
|
-
</Text>
|
|
422
|
-
</TouchableOpacity>
|
|
423
|
-
);
|
|
424
|
-
})}
|
|
425
|
-
</View>
|
|
374
|
+
<SegmentedControl type="radio" label={t('accounts.members.invite.roleLabel') || 'Role'}
|
|
375
|
+
value={member.role} onValueChange={role => handleChangeRole(member, role)} disabled={updateMutation.isPending} size="small">
|
|
376
|
+
{ASSIGNABLE_ROLES.map(role => <SegmentedControlItem key={role} value={role}>
|
|
377
|
+
<SegmentedControlItemText>{roleLabel(role)}</SegmentedControlItemText>
|
|
378
|
+
</SegmentedControlItem>)}
|
|
379
|
+
</SegmentedControl>
|
|
426
380
|
) : !isOwner ? (
|
|
427
381
|
<Text className="text-caption font-caption text-text-secondary">
|
|
428
382
|
{roleLabel(member.role)}
|
|
@@ -433,32 +387,30 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
|
|
|
433
387
|
{(canTransferToThis || canRemoveThisMember) ? (
|
|
434
388
|
<View className="flex-row gap-space-16 pt-space-4">
|
|
435
389
|
{canTransferToThis ? (
|
|
436
|
-
<
|
|
390
|
+
<Button appearance="plain" tone="neutral" size="small"
|
|
437
391
|
accessibilityRole="button"
|
|
438
392
|
accessibilityLabel={t('accounts.members.actions.transfer') || 'Transfer ownership'}
|
|
439
393
|
onPress={() => confirmTransfer(member)}
|
|
440
|
-
activeOpacity={0.7}
|
|
441
394
|
className="flex-row items-center gap-space-4"
|
|
442
395
|
>
|
|
443
396
|
<Ionicons name="swap-horizontal-outline" size={16} color={colors.icon} />
|
|
444
397
|
<Text className="text-caption font-semibold text-text-secondary">
|
|
445
398
|
{t('accounts.members.actions.transfer') || 'Transfer ownership'}
|
|
446
399
|
</Text>
|
|
447
|
-
</
|
|
400
|
+
</Button>
|
|
448
401
|
) : null}
|
|
449
402
|
{canRemoveThisMember ? (
|
|
450
|
-
<
|
|
403
|
+
<Button appearance="plain" tone="neutral" size="small"
|
|
451
404
|
accessibilityRole="button"
|
|
452
405
|
accessibilityLabel={t('accounts.members.actions.remove') || 'Remove member'}
|
|
453
406
|
onPress={() => confirmRemove(member)}
|
|
454
|
-
activeOpacity={0.7}
|
|
455
407
|
className="flex-row items-center gap-space-4"
|
|
456
408
|
>
|
|
457
409
|
<Ionicons name="trash-outline" size={16} color={colors.error} />
|
|
458
410
|
<Text className="text-caption font-semibold" style={{ color: colors.error }}>
|
|
459
411
|
{t('accounts.members.actions.remove') || 'Remove'}
|
|
460
412
|
</Text>
|
|
461
|
-
</
|
|
413
|
+
</Button>
|
|
462
414
|
) : null}
|
|
463
415
|
</View>
|
|
464
416
|
) : null}
|
|
@@ -233,7 +233,7 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
|
|
|
233
233
|
</Text>
|
|
234
234
|
</View>
|
|
235
235
|
<Button
|
|
236
|
-
|
|
236
|
+
appearance="solid" tone="accent"
|
|
237
237
|
onPress={handleSave}
|
|
238
238
|
disabled={updateMutation.isPending || !displayName.trim() || Boolean(displayNameError)}
|
|
239
239
|
loading={updateMutation.isPending}
|
|
@@ -12,7 +12,14 @@ import { Button } from '@oxy.so/bloom/button';
|
|
|
12
12
|
import { TextField, TextFieldInput } from '@oxy.so/bloom/text-field';
|
|
13
13
|
import { IconCircle } from '@oxy.so/bloom/icon-circle';
|
|
14
14
|
import { BenefitList, BenefitRow } from '../components/BenefitList';
|
|
15
|
-
|
|
15
|
+
// Per glyph, never `@oxy.so/bloom/icons`. That barrel re-exports all 461 Remix
|
|
16
|
+
// glyphs and Metro does not tree-shake, so one import of it here re-ships every
|
|
17
|
+
// glyph — 313,123 B, measured — to every app in this package's graph, and no
|
|
18
|
+
// consumer can opt out of what a dependency asks for.
|
|
19
|
+
import { RiInformationLine } from '@oxy.so/bloom/icons/RiInformationLine';
|
|
20
|
+
import { RiShieldCheckLine } from '@oxy.so/bloom/icons/RiShieldCheckLine';
|
|
21
|
+
import { RiSparklingLine } from '@oxy.so/bloom/icons/RiSparklingLine';
|
|
22
|
+
import { RiVerifiedBadgeLine } from '@oxy.so/bloom/icons/RiVerifiedBadgeLine';
|
|
16
23
|
import { useI18n } from '../hooks/useI18n';
|
|
17
24
|
import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
|
|
18
25
|
import { useOxy } from '../context/OxyContext';
|
|
@@ -82,7 +89,7 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
82
89
|
<View className="px-screen-margin pb-space-32">
|
|
83
90
|
{/* Hero */}
|
|
84
91
|
<View className="items-center py-space-24 gap-space-12">
|
|
85
|
-
<IconCircle icon={
|
|
92
|
+
<IconCircle icon={RiVerifiedBadgeLine} />
|
|
86
93
|
<H4 className="text-headerBold font-headerBold text-text text-center">
|
|
87
94
|
{t('accountVerification.heroTitle') || 'Get a verified badge'}
|
|
88
95
|
</H4>
|
|
@@ -97,15 +104,15 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
97
104
|
accessibilityLabel={t('accountVerification.sections.benefits') || 'What verification gives you'}
|
|
98
105
|
>
|
|
99
106
|
<BenefitRow
|
|
100
|
-
icon={<
|
|
107
|
+
icon={<RiShieldCheckLine size="sm" style={{ color: bloomTheme.colors.primary }} />}
|
|
101
108
|
label={t('accountVerification.benefits.authenticity') || 'Confirms your identity is authentic and trusted'}
|
|
102
109
|
/>
|
|
103
110
|
<BenefitRow
|
|
104
|
-
icon={<
|
|
111
|
+
icon={<RiVerifiedBadgeLine size="sm" style={{ color: bloomTheme.colors.primary }} />}
|
|
105
112
|
label={t('accountVerification.benefits.badge') || 'Displays a verified badge across the platform'}
|
|
106
113
|
/>
|
|
107
114
|
<BenefitRow
|
|
108
|
-
icon={<
|
|
115
|
+
icon={<RiSparklingLine size="sm" style={{ color: bloomTheme.colors.primary }} />}
|
|
109
116
|
label={t('accountVerification.benefits.credibility') || 'Builds credibility with people who follow you'}
|
|
110
117
|
/>
|
|
111
118
|
</BenefitList>
|
|
@@ -148,7 +155,7 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
148
155
|
</View>
|
|
149
156
|
|
|
150
157
|
<Button
|
|
151
|
-
|
|
158
|
+
appearance="solid" tone="accent"
|
|
152
159
|
size="large"
|
|
153
160
|
fullWidth
|
|
154
161
|
className="mt-space-24"
|
|
@@ -161,7 +168,7 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
|
|
|
161
168
|
</Button>
|
|
162
169
|
|
|
163
170
|
<View className="flex-row items-start gap-space-8 mt-space-24">
|
|
164
|
-
<
|
|
171
|
+
<RiInformationLine
|
|
165
172
|
size="sm"
|
|
166
173
|
style={{ color: bloomTheme.colors.textTertiary }}
|
|
167
174
|
/>
|
|
@@ -28,16 +28,8 @@
|
|
|
28
28
|
|
|
29
29
|
import type React from 'react';
|
|
30
30
|
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
31
|
-
import {
|
|
32
|
-
|
|
33
|
-
Text,
|
|
34
|
-
StyleSheet,
|
|
35
|
-
ActivityIndicator,
|
|
36
|
-
Image,
|
|
37
|
-
Platform,
|
|
38
|
-
AccessibilityInfo,
|
|
39
|
-
Pressable,
|
|
40
|
-
} from 'react-native';
|
|
31
|
+
import { View, StyleSheet, ActivityIndicator, Image, Platform, AccessibilityInfo, Pressable } from 'react-native';
|
|
32
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
41
33
|
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
42
34
|
import Animated, {
|
|
43
35
|
Easing,
|
|
@@ -375,7 +375,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
375
375
|
|
|
376
376
|
<View className="flex-row gap-space-8 mt-space-24 w-full">
|
|
377
377
|
<Button
|
|
378
|
-
|
|
378
|
+
appearance="subtle" tone="neutral"
|
|
379
379
|
onPress={goBack}
|
|
380
380
|
accessibilityLabel="Go back"
|
|
381
381
|
icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
|
|
@@ -385,7 +385,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
385
385
|
</Button>
|
|
386
386
|
|
|
387
387
|
<Button
|
|
388
|
-
|
|
388
|
+
appearance="solid" tone="accent"
|
|
389
389
|
onPress={nextStep}
|
|
390
390
|
disabled={!isTypeStepValid()}
|
|
391
391
|
accessibilityLabel="Continue to next step"
|
|
@@ -485,7 +485,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
485
485
|
|
|
486
486
|
<View className="flex-row gap-space-8 mt-space-24 w-full">
|
|
487
487
|
<Button
|
|
488
|
-
|
|
488
|
+
appearance="subtle" tone="neutral"
|
|
489
489
|
onPress={prevStep}
|
|
490
490
|
accessibilityLabel="Go back"
|
|
491
491
|
icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
|
|
@@ -495,7 +495,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
495
495
|
</Button>
|
|
496
496
|
|
|
497
497
|
<Button
|
|
498
|
-
|
|
498
|
+
appearance="solid" tone="accent"
|
|
499
499
|
onPress={nextStep}
|
|
500
500
|
disabled={!isDetailsStepValid()}
|
|
501
501
|
accessibilityLabel="Continue to next step"
|
|
@@ -574,7 +574,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
574
574
|
|
|
575
575
|
<View className="flex-row gap-space-8 mt-space-24 w-full">
|
|
576
576
|
<Button
|
|
577
|
-
|
|
577
|
+
appearance="subtle" tone="neutral"
|
|
578
578
|
onPress={prevStep}
|
|
579
579
|
accessibilityLabel="Go back"
|
|
580
580
|
icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
|
|
@@ -584,7 +584,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
584
584
|
</Button>
|
|
585
585
|
|
|
586
586
|
<Button
|
|
587
|
-
|
|
587
|
+
appearance="solid" tone="accent"
|
|
588
588
|
onPress={nextStep}
|
|
589
589
|
disabled={!isContactStepValid()}
|
|
590
590
|
accessibilityLabel="Continue to summary"
|
|
@@ -653,7 +653,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
653
653
|
</View>
|
|
654
654
|
|
|
655
655
|
<Button
|
|
656
|
-
|
|
656
|
+
appearance="solid" tone="accent"
|
|
657
657
|
onPress={handleSubmitFeedback}
|
|
658
658
|
disabled={feedbackState.status === "submitting"}
|
|
659
659
|
loading={feedbackState.status === "submitting"}
|
|
@@ -670,7 +670,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
670
670
|
|
|
671
671
|
<View className="flex-row mt-space-16 w-full">
|
|
672
672
|
<Button
|
|
673
|
-
|
|
673
|
+
appearance="subtle" tone="neutral"
|
|
674
674
|
onPress={prevStep}
|
|
675
675
|
accessibilityLabel="Go back"
|
|
676
676
|
icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
|
|
@@ -701,7 +701,7 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
|
|
|
701
701
|
"Your feedback has been submitted successfully. We'll review it and get back to you soon."}
|
|
702
702
|
</Text>
|
|
703
703
|
<Button
|
|
704
|
-
|
|
704
|
+
appearance="solid" tone="accent"
|
|
705
705
|
onPress={() => {
|
|
706
706
|
resetForm();
|
|
707
707
|
setCurrentStep(0);
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
+
import { Button } from '@oxy.so/bloom/button';
|
|
1
2
|
import type React from 'react';
|
|
2
3
|
import { useState, useCallback, useMemo, useRef } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
Text,
|
|
6
|
-
TouchableOpacity,
|
|
7
|
-
StyleSheet,
|
|
8
|
-
ScrollView,
|
|
9
|
-
ActivityIndicator,
|
|
10
|
-
RefreshControl,
|
|
11
|
-
TextInput,
|
|
12
|
-
useWindowDimensions,
|
|
13
|
-
} from 'react-native';
|
|
4
|
+
import { View, TouchableOpacity, StyleSheet, ScrollView, ActivityIndicator, RefreshControl, useWindowDimensions } from 'react-native';
|
|
5
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
14
6
|
import { useQueryClient } from '@tanstack/react-query';
|
|
15
7
|
import { Image as ExpoImage } from 'expo-image';
|
|
16
8
|
import type { FileManagementScreenProps } from '../types/fileManagement';
|
|
@@ -46,11 +38,10 @@ import PhotoPickerView from './fileManagement/PhotoPickerSection';
|
|
|
46
38
|
import FileListSection, { type FileListItem } from './fileManagement/FileListSection';
|
|
47
39
|
import FileLibraryError from './fileManagement/FileLibraryError';
|
|
48
40
|
import UploadBar from './fileManagement/UploadBar';
|
|
49
|
-
import {
|
|
41
|
+
import { SegmentedControl, SegmentedControlItem } from '@oxy.so/bloom/segmented-control';
|
|
42
|
+
import { Search } from '@oxy.so/bloom/search';
|
|
50
43
|
|
|
51
|
-
//
|
|
52
|
-
// style array (interpolated backgroundColor), and the photo tiles are
|
|
53
|
-
// `expo-image` (no className remap). Everything else uses NativeWind classNames.
|
|
44
|
+
// Photo tiles use expo-image dimensions; controls use Bloom primitives.
|
|
54
45
|
// Nav-header slot layout for this screen's action row + review-mode back button.
|
|
55
46
|
const fmHeaderStyles = StyleSheet.create({
|
|
56
47
|
actionsRow: {
|
|
@@ -67,15 +58,6 @@ const fmHeaderStyles = StyleSheet.create({
|
|
|
67
58
|
});
|
|
68
59
|
|
|
69
60
|
const screenStyles = StyleSheet.create({
|
|
70
|
-
viewModeButton: {
|
|
71
|
-
paddingHorizontal: 10,
|
|
72
|
-
paddingVertical: 6,
|
|
73
|
-
borderRadius: 999,
|
|
74
|
-
minWidth: 36,
|
|
75
|
-
alignItems: 'center',
|
|
76
|
-
justifyContent: 'center',
|
|
77
|
-
marginHorizontal: 1,
|
|
78
|
-
},
|
|
79
61
|
justifiedPhotoImage: { width: '100%', height: '100%', borderRadius: 6 },
|
|
80
62
|
});
|
|
81
63
|
|
|
@@ -799,35 +781,16 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
799
781
|
},
|
|
800
782
|
// Hide action buttons when selecting (in selectMode or bulk operations mode)
|
|
801
783
|
rightElement: (!selectMode && selectedIds.size === 0) ? (
|
|
802
|
-
<View className="flex-row items-center gap-
|
|
803
|
-
{(isImage || isVideo || file.contentType.includes('pdf'))
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
<TouchableOpacity
|
|
813
|
-
className="w-[34px] h-[34px] rounded-[8px] items-center justify-center"
|
|
814
|
-
style={{ backgroundColor: colors.backgroundSecondary }}
|
|
815
|
-
onPress={() => handleFileDownload(file.id, file.filename)}
|
|
816
|
-
>
|
|
817
|
-
<Ionicons name="download" size={18} color={colors.primary} />
|
|
818
|
-
</TouchableOpacity>
|
|
819
|
-
<TouchableOpacity
|
|
820
|
-
className="w-[34px] h-[34px] rounded-[8px] items-center justify-center"
|
|
821
|
-
style={{ backgroundColor: colors.negativeSubtle }}
|
|
822
|
-
onPress={() => confirmFileDelete(file.id, file.filename)}
|
|
823
|
-
disabled={deletingId === file.id}
|
|
824
|
-
>
|
|
825
|
-
{deletingId === file.id ? (
|
|
826
|
-
<ActivityIndicator size="small" color={colors.error} />
|
|
827
|
-
) : (
|
|
828
|
-
<Ionicons name="trash" size={18} color={colors.error} />
|
|
829
|
-
)}
|
|
830
|
-
</TouchableOpacity>
|
|
784
|
+
<View className="flex-row items-center gap-1.5 ml-3">
|
|
785
|
+
{(isImage || isVideo || file.contentType.includes('pdf')) ? <Button appearance="subtle" tone="neutral" size="small" iconOnly stopPropagation
|
|
786
|
+
accessibilityLabel={`Preview ${file.filename}`} onPress={() => handleFileOpen(file)}
|
|
787
|
+
icon={<Ionicons name="eye" size={18} color={colors.text} />} /> : null}
|
|
788
|
+
<Button appearance="subtle" tone="neutral" size="small" iconOnly stopPropagation
|
|
789
|
+
accessibilityLabel={`Download ${file.filename}`} onPress={() => handleFileDownload(file.id, file.filename)}
|
|
790
|
+
icon={<Ionicons name="download" size={18} color={colors.text} />} />
|
|
791
|
+
<Button appearance="subtle" tone="danger" size="small" iconOnly stopPropagation loading={deletingId === file.id}
|
|
792
|
+
accessibilityLabel={`Delete ${file.filename}`} onPress={() => confirmFileDelete(file.id, file.filename)}
|
|
793
|
+
icon={<Ionicons name="trash" size={18} color={colors.error} />} />
|
|
831
794
|
</View>
|
|
832
795
|
) : undefined,
|
|
833
796
|
};
|
|
@@ -844,7 +807,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
844
807
|
iconColor={colors.error}
|
|
845
808
|
titleColor={colors.text}
|
|
846
809
|
descriptionColor={colors.textSecondary}
|
|
847
|
-
buttonColor={colors.primary}
|
|
848
810
|
/>
|
|
849
811
|
);
|
|
850
812
|
|
|
@@ -866,21 +828,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
866
828
|
: t('fileManagement.emptyPhotos.otherDescription')
|
|
867
829
|
} </Text>
|
|
868
830
|
{user?.id === targetUserId && (
|
|
869
|
-
<
|
|
870
|
-
className="flex-row items-center px-[24px] py-[12px] rounded-[24px] gap-[8px]"
|
|
871
|
-
style={{ backgroundColor: colors.primary }}
|
|
872
|
-
onPress={handleFileUpload}
|
|
873
|
-
disabled={uploading || isPickingDocument}
|
|
874
|
-
>
|
|
875
|
-
{(uploading || isPickingDocument) ? (
|
|
876
|
-
<ActivityIndicator size="small" color="#FFFFFF" />
|
|
877
|
-
) : (
|
|
878
|
-
<>
|
|
879
|
-
<Ionicons name="cloud-upload" size={20} color="#FFFFFF" />
|
|
880
|
-
<Text className="text-white text-[16px] font-semibold">{t('fileManagement.uploadPhotos')}</Text>
|
|
881
|
-
</>
|
|
882
|
-
)}
|
|
883
|
-
</TouchableOpacity>
|
|
831
|
+
<Button onPress={handleFileUpload} loading={uploading || isPickingDocument}>{t('fileManagement.uploadPhotos')}</Button>
|
|
884
832
|
)}
|
|
885
833
|
</View>
|
|
886
834
|
);
|
|
@@ -934,21 +882,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
934
882
|
}
|
|
935
883
|
</Text>
|
|
936
884
|
{user?.id === targetUserId && (
|
|
937
|
-
<
|
|
938
|
-
className="flex-row items-center px-[24px] py-[12px] rounded-[24px] gap-[8px]"
|
|
939
|
-
style={{ backgroundColor: colors.primary }}
|
|
940
|
-
onPress={handleFileUpload}
|
|
941
|
-
disabled={uploading || isPickingDocument}
|
|
942
|
-
>
|
|
943
|
-
{(uploading || isPickingDocument) ? (
|
|
944
|
-
<ActivityIndicator size="small" color="#FFFFFF" />
|
|
945
|
-
) : (
|
|
946
|
-
<>
|
|
947
|
-
<Ionicons name="cloud-upload" size={20} color="#FFFFFF" />
|
|
948
|
-
<Text className="text-white text-[16px] font-semibold">{t('fileManagement.uploadFiles')}</Text>
|
|
949
|
-
</>
|
|
950
|
-
)}
|
|
951
|
-
</TouchableOpacity>
|
|
885
|
+
<Button onPress={handleFileUpload} loading={uploading || isPickingDocument}>{t('fileManagement.uploadFiles')}</Button>
|
|
952
886
|
)}
|
|
953
887
|
</View>
|
|
954
888
|
);
|
|
@@ -1215,60 +1149,18 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1215
1149
|
className="flex-1"
|
|
1216
1150
|
style={{ maxWidth: '80%' }}
|
|
1217
1151
|
>
|
|
1218
|
-
<
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
style={screenStyles.viewModeButton}
|
|
1229
|
-
accessibilityLabel={t('fileManagement.a11y.viewAll') || 'Show all files'}
|
|
1230
|
-
/>
|
|
1231
|
-
<AnimatedButton
|
|
1232
|
-
isSelected={viewMode === 'photos'}
|
|
1233
|
-
onPress={() => setViewMode('photos')}
|
|
1234
|
-
icon={viewMode === 'photos' ? 'image-multiple' : 'image-multiple-outline'}
|
|
1235
|
-
primaryColor={colors.primary}
|
|
1236
|
-
textColor={colors.text}
|
|
1237
|
-
style={screenStyles.viewModeButton}
|
|
1238
|
-
accessibilityLabel={t('fileManagement.a11y.viewPhotos') || 'Show photos only'}
|
|
1239
|
-
/>
|
|
1240
|
-
<AnimatedButton
|
|
1241
|
-
isSelected={viewMode === 'videos'}
|
|
1242
|
-
onPress={() => setViewMode('videos')}
|
|
1243
|
-
icon={viewMode === 'videos' ? 'video' : 'video-outline'}
|
|
1244
|
-
primaryColor={colors.primary}
|
|
1245
|
-
textColor={colors.text}
|
|
1246
|
-
style={screenStyles.viewModeButton}
|
|
1247
|
-
accessibilityLabel={t('fileManagement.a11y.viewVideos') || 'Show videos only'}
|
|
1248
|
-
/>
|
|
1249
|
-
<AnimatedButton
|
|
1250
|
-
isSelected={viewMode === 'documents'}
|
|
1251
|
-
onPress={() => setViewMode('documents')}
|
|
1252
|
-
icon={viewMode === 'documents' ? 'file-document' : 'file-document-outline'}
|
|
1253
|
-
primaryColor={colors.primary}
|
|
1254
|
-
textColor={colors.text}
|
|
1255
|
-
style={screenStyles.viewModeButton}
|
|
1256
|
-
accessibilityLabel={t('fileManagement.a11y.viewDocuments') || 'Show documents only'}
|
|
1257
|
-
/>
|
|
1258
|
-
<AnimatedButton
|
|
1259
|
-
isSelected={viewMode === 'audio'}
|
|
1260
|
-
onPress={() => setViewMode('audio')}
|
|
1261
|
-
icon={viewMode === 'audio' ? 'music-note' : 'music-note-outline'}
|
|
1262
|
-
primaryColor={colors.primary}
|
|
1263
|
-
textColor={colors.text}
|
|
1264
|
-
style={screenStyles.viewModeButton}
|
|
1265
|
-
accessibilityLabel={t('fileManagement.a11y.viewAudio') || 'Show audio only'}
|
|
1266
|
-
/>
|
|
1267
|
-
</View>
|
|
1152
|
+
<SegmentedControl type="radio" label={t('fileManagement.viewMode') || 'File type'}
|
|
1153
|
+
value={viewMode} onValueChange={setViewMode} size="small">
|
|
1154
|
+
{(['all', 'photos', 'videos', 'documents', 'audio'] as const).map(mode => (
|
|
1155
|
+
<SegmentedControlItem key={mode} value={mode} accessibilityLabel={mode}>
|
|
1156
|
+
<MaterialCommunityIcons
|
|
1157
|
+
name={({ all: 'folder-outline', photos: 'image-multiple-outline', videos: 'video-outline', documents: 'file-document-outline', audio: 'music-note-outline' } as const)[mode]}
|
|
1158
|
+
size={18} color={colors.text} />
|
|
1159
|
+
</SegmentedControlItem>
|
|
1160
|
+
))}
|
|
1161
|
+
</SegmentedControl>
|
|
1268
1162
|
</ScrollView>
|
|
1269
|
-
<
|
|
1270
|
-
className="flex-row items-center justify-center px-[10px] py-[6px] rounded-full min-w-[36px] gap-[4px]"
|
|
1271
|
-
style={{ backgroundColor: colors.card }}
|
|
1163
|
+
<Button appearance="subtle" tone="neutral" size="small"
|
|
1272
1164
|
accessibilityRole="button"
|
|
1273
1165
|
accessibilityLabel={t('fileManagement.a11y.sortBy', {
|
|
1274
1166
|
field: sortBy,
|
|
@@ -1285,7 +1177,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1285
1177
|
setSortOrder(prev => prev === 'asc' ? 'desc' : 'asc');
|
|
1286
1178
|
}
|
|
1287
1179
|
}}
|
|
1288
|
-
|
|
1180
|
+
trailing={<View className="flex-row items-center gap-1">
|
|
1289
1181
|
<MaterialCommunityIcons
|
|
1290
1182
|
name={
|
|
1291
1183
|
sortBy === 'date' ? 'calendar' :
|
|
@@ -1300,58 +1192,21 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1300
1192
|
size={14}
|
|
1301
1193
|
color={colors.textSecondary}
|
|
1302
1194
|
/>
|
|
1303
|
-
</
|
|
1195
|
+
</View>} />
|
|
1304
1196
|
{user?.id === targetUserId && (!selectMode || allowUploadInSelectMode) && (
|
|
1305
|
-
<
|
|
1306
|
-
className="h-[44px] w-[44px] rounded-[22px] items-center justify-center"
|
|
1307
|
-
style={{ backgroundColor: colors.primary }}
|
|
1308
|
-
onPress={handleFileUpload}
|
|
1309
|
-
disabled={uploading || isPickingDocument}
|
|
1310
|
-
accessibilityRole="button"
|
|
1197
|
+
<Button iconOnly onPress={handleFileUpload} loading={uploading || isPickingDocument}
|
|
1311
1198
|
accessibilityLabel={t('fileManagement.a11y.uploadFile') || 'Upload file'}
|
|
1312
|
-
|
|
1313
|
-
>
|
|
1314
|
-
{uploading ? (
|
|
1315
|
-
<View className="items-center justify-center">
|
|
1316
|
-
<ActivityIndicator size="small" color="#FFFFFF" />
|
|
1317
|
-
{uploadProgress && (
|
|
1318
|
-
<Text className="text-white text-[10px] font-semibold mt-[2px]">
|
|
1319
|
-
{uploadProgress.current}/{uploadProgress.total}
|
|
1320
|
-
</Text>
|
|
1321
|
-
)}
|
|
1322
|
-
</View>
|
|
1323
|
-
) : isPickingDocument ? (
|
|
1324
|
-
<ActivityIndicator size="small" color="#FFFFFF" />
|
|
1325
|
-
) : (
|
|
1326
|
-
<Ionicons name="add" size={22} color="#FFFFFF" />
|
|
1327
|
-
)}
|
|
1328
|
-
</TouchableOpacity>
|
|
1199
|
+
icon={<Ionicons name="add" size={22} color={colors.primaryForeground} />} />
|
|
1329
1200
|
)}
|
|
1330
1201
|
</View>
|
|
1331
1202
|
|
|
1332
1203
|
{/* Search Bar */}
|
|
1333
1204
|
{files.length > 0 && (viewMode === 'all' || files.some(f => f.contentType.startsWith('image/'))) && (
|
|
1334
|
-
<View
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
<Ionicons name="search" size={22} color={colors.icon} />
|
|
1339
|
-
<TextInput
|
|
1340
|
-
className="flex-1 text-[16px] leading-[20px]"
|
|
1341
|
-
style={{ color: colors.text }}
|
|
1342
|
-
placeholder={viewMode === 'photos' ? t('fileManagement.searchPhotos') : t('fileManagement.searchFiles')}
|
|
1343
|
-
placeholderTextColor={colors.textSecondary}
|
|
1344
|
-
value={searchQuery}
|
|
1345
|
-
onChangeText={setSearchQuery}
|
|
1205
|
+
<View className="mx-[12px] mb-[12px]">
|
|
1206
|
+
<Search
|
|
1207
|
+
label={viewMode === 'photos' ? t('fileManagement.searchPhotos') : t('fileManagement.searchFiles')}
|
|
1208
|
+
value={searchQuery} onValueChange={setSearchQuery} onClearText={() => setSearchQuery('')}
|
|
1346
1209
|
/>
|
|
1347
|
-
{searchQuery.length > 0 && (
|
|
1348
|
-
<TouchableOpacity
|
|
1349
|
-
onPress={() => setSearchQuery('')}
|
|
1350
|
-
className="p-[4px] rounded-[12px] items-center justify-center"
|
|
1351
|
-
>
|
|
1352
|
-
<Ionicons name="close-circle" size={22} color={colors.icon} />
|
|
1353
|
-
</TouchableOpacity>
|
|
1354
|
-
)}
|
|
1355
1210
|
</View>
|
|
1356
1211
|
)}
|
|
1357
1212
|
|
|
@@ -1410,8 +1265,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
|
|
|
1410
1265
|
{!selectMode && uploading && (
|
|
1411
1266
|
<UploadBar
|
|
1412
1267
|
uploadProgress={uploadProgress}
|
|
1413
|
-
isDark={bloomTheme.isDark}
|
|
1414
|
-
colors={colors}
|
|
1415
1268
|
t={t}
|
|
1416
1269
|
/>
|
|
1417
1270
|
)}
|