@rapidmx/web-client 0.21.0 → 0.23.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/README.md +48 -14
- package/apps/admin/_layout.tsx +2 -2
- package/apps/admin/audit-log/index.tsx +4 -4
- package/apps/admin/branding/index.tsx +3 -3
- package/apps/admin/data-requests/index.tsx +8 -8
- package/apps/admin/distribution-lists/[uid].tsx +3 -3
- package/apps/admin/distribution-lists/index.tsx +4 -4
- package/apps/admin/distribution-lists/new/index.tsx +5 -5
- package/apps/admin/domains/[uid].tsx +6 -6
- package/apps/admin/domains/index.tsx +4 -4
- package/apps/admin/domains/new/index.tsx +5 -5
- package/apps/admin/encryption-policy/index.tsx +1 -1
- package/apps/admin/escrow-scopes/[uid].tsx +7 -7
- package/apps/admin/escrow-scopes/index.tsx +4 -4
- package/apps/admin/escrow-scopes/new/index.tsx +5 -5
- package/apps/admin/index.tsx +6 -6
- package/apps/admin/ingest-queue/index.tsx +4 -4
- package/apps/admin/mailbox-policy/index.tsx +1 -1
- package/apps/admin/mailboxes/[uid].tsx +5 -5
- package/apps/admin/quarantine/index.tsx +5 -5
- package/apps/admin/retention-policy/index.tsx +3 -3
- package/apps/admin/signing-certificates/index.tsx +5 -5
- package/apps/admin/transport-rules/[uid].tsx +5 -5
- package/apps/admin/transport-rules/_transportRuleConfig.tsx +3 -3
- package/apps/admin/transport-rules/index.tsx +4 -4
- package/apps/admin/transport-rules/new/index.tsx +5 -5
- package/apps/escrow/_layout.tsx +1 -1
- package/apps/escrow/audit-log/index.tsx +4 -4
- package/apps/escrow/index.tsx +4 -4
- package/apps/escrow/matters/[uid].tsx +10 -10
- package/apps/escrow/matters/new/index.tsx +6 -6
- package/apps/shared/appearance/AppearanceForm.tsx +3 -3
- package/apps/shared/appearance/AppearanceHead.tsx +1 -1
- package/apps/shared/appearance/AppearanceProvider.tsx +3 -3
- package/apps/shared/appearance/appearanceCache.ts +1 -1
- package/apps/shared/appearance/appearanceContext.ts +1 -1
- package/apps/shared/appearance/theme.ts +1 -1
- package/apps/shared/auth/adminAccess.ts +1 -1
- package/apps/shared/calendar/bookingPlugin.ts +1 -1
- package/apps/shared/calendar/calendarLiveUpdates.ts +1 -1
- package/apps/shared/calendar/calendarReminders.ts +1 -1
- package/apps/shared/calendar/useCalendarReminders.ts +1 -1
- package/apps/shared/components/admin/diagnostics/DiagnosticsManager.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/InstalledPlugins.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/LogsPanel.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/PackagesTable.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/RuntimePanel.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/SystemPanel.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/VersionsPanel.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/diagnosticsApi.ts +1 -1
- package/apps/shared/components/admin/diagnostics/format.ts +1 -1
- package/apps/shared/components/admin/diagnostics/logClient.ts +1 -1
- package/apps/shared/components/admin/distributionLists/MemberListCard.tsx +4 -4
- package/apps/shared/components/admin/elevation.ts +1 -1
- package/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.tsx +3 -3
- package/apps/shared/components/admin/layout/AdminShell.tsx +8 -8
- package/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.tsx +6 -6
- package/apps/shared/components/admin/mailboxes/EscrowScopeCard.tsx +10 -8
- package/apps/shared/components/admin/mailboxes/LeftoverMailboxesSection.tsx +4 -4
- package/apps/shared/components/admin/mailboxes/MailboxTable.tsx +1 -1
- package/apps/shared/components/admin/mailboxes/ResourceSettingsCard.tsx +19 -14
- package/apps/shared/components/admin/mailboxes/ShareAccessCard.tsx +5 -5
- package/apps/shared/components/admin/settings/BrandingForm.tsx +5 -5
- package/apps/shared/components/admin/settings/DomainDnsSetup.tsx +5 -5
- package/apps/shared/components/admin/settings/EncryptionPolicyForm.tsx +4 -4
- package/apps/shared/components/admin/settings/LoadedSettingsForm.tsx +2 -2
- package/apps/shared/components/admin/settings/MailboxCreateForm.tsx +32 -27
- package/apps/shared/components/admin/settings/MailboxPolicyForm.tsx +4 -4
- package/apps/shared/components/admin/settings/PluginsManager.tsx +5 -5
- package/apps/shared/components/admin/settings/RetentionPolicyForm.tsx +5 -5
- package/apps/shared/components/admin/setup/EscrowSetupStep.tsx +7 -7
- package/apps/shared/components/admin/setup/SetupWizard.tsx +28 -24
- package/apps/shared/components/admin/signOut.ts +1 -1
- package/apps/shared/components/admin/usePagedList.tsx +2 -2
- package/apps/shared/components/calendar/AppointmentQuickForm.tsx +3 -3
- package/apps/shared/components/calendar/CalendarListSidebar.tsx +3 -3
- package/apps/shared/components/calendar/DescriptionEditor.tsx +1 -1
- package/apps/shared/components/calendar/EventDescriptionView.tsx +1 -1
- package/apps/shared/components/calendar/EventDetails.tsx +16 -14
- package/apps/shared/components/calendar/EventEditor.tsx +54 -39
- package/apps/shared/components/calendar/EventExpandedForm.tsx +3 -3
- package/apps/shared/components/calendar/EventFormParts.tsx +2 -2
- package/apps/shared/components/calendar/EventModal.tsx +5 -5
- package/apps/shared/components/calendar/EventQuickForm.tsx +3 -3
- package/apps/shared/components/calendar/EventShell.tsx +1 -1
- package/apps/shared/components/calendar/FindATime.tsx +6 -4
- package/apps/shared/components/calendar/GuestInput.tsx +2 -2
- package/apps/shared/components/calendar/MonthView.tsx +2 -2
- package/apps/shared/components/calendar/QuickCreateFaces.tsx +1 -1
- package/apps/shared/components/calendar/QuickFaceFrame.tsx +1 -1
- package/apps/shared/components/calendar/RecurrenceEditor.tsx +2 -2
- package/apps/shared/components/calendar/RequestChangeForm.tsx +8 -6
- package/apps/shared/components/calendar/ResourcePicker.tsx +7 -5
- package/apps/shared/components/calendar/SplitDayView.tsx +1 -1
- package/apps/shared/components/calendar/TaskQuickForm.tsx +23 -18
- package/apps/shared/components/calendar/TimeGridView.tsx +5 -3
- package/apps/shared/components/calendar/allDay.ts +2 -2
- package/apps/shared/components/calendar/eventDialogFields.ts +3 -3
- package/apps/shared/components/calendar/eventForm.ts +3 -3
- package/apps/shared/components/calendar/eventFormat.ts +3 -3
- package/apps/shared/components/calendar/findTimeGrid.ts +2 -2
- package/apps/shared/components/calendar/layout/CalendarShell.tsx +11 -9
- package/apps/shared/components/contacts/ContactDetailPane.tsx +4 -4
- package/apps/shared/components/contacts/ContactForm.tsx +27 -17
- package/apps/shared/components/contacts/ContactsSidebar.tsx +7 -5
- package/apps/shared/components/contacts/KeyChangeReview.tsx +5 -5
- package/apps/shared/components/contacts/contactKeys.ts +3 -3
- package/apps/shared/components/contacts/layout/ContactsShell.tsx +9 -7
- package/apps/shared/components/escrow/layout/EscrowShell.tsx +6 -6
- package/apps/shared/components/forms/StringListField.tsx +1 -1
- package/apps/shared/components/layout/AppShell.tsx +12 -10
- package/apps/shared/components/layout/BrandingChrome.tsx +1 -1
- package/apps/shared/components/layout/KeyEnrollmentGate.tsx +9 -9
- package/apps/shared/components/layout/MailboxProvisioning.tsx +8 -6
- package/apps/shared/components/layout/RecoveryCodeUnlock.tsx +9 -9
- package/apps/shared/components/layout/ThemeSwitch.tsx +1 -1
- package/apps/shared/components/layout/UnlockPromptProvider.tsx +6 -6
- package/apps/shared/components/layout/UserMenu.tsx +6 -4
- package/apps/shared/components/mail/ConversationList.tsx +25 -10
- package/apps/shared/components/mail/ConversationThreadPane.tsx +33 -17
- package/apps/shared/components/mail/InviteCard.tsx +11 -9
- package/apps/shared/components/mail/LazyReadingPane.tsx +2 -2
- package/apps/shared/components/mail/MailAddress.tsx +1 -1
- package/apps/shared/components/mail/MailListToolbar.tsx +2 -2
- package/apps/shared/components/mail/MailSelectionBar.tsx +2 -2
- package/apps/shared/components/mail/MenuButton.tsx +1 -1
- package/apps/shared/components/mail/MessageDetailPane.tsx +69 -48
- package/apps/shared/components/mail/MoveToFolderDialog.tsx +8 -6
- package/apps/shared/components/mail/OutboxRowStatus.tsx +1 -1
- package/apps/shared/components/mail/PermanentDeleteDialog.tsx +2 -2
- package/apps/shared/components/mail/compose/ComposeContext.tsx +14 -3
- package/apps/shared/components/mail/compose/ComposeWindow.tsx +34 -30
- package/apps/shared/components/mail/compose/ComposeWindowPlaceholder.tsx +4 -4
- package/apps/shared/components/mail/compose/EmojiPicker.tsx +2 -2
- package/apps/shared/components/mail/compose/GifPicker.tsx +3 -3
- package/apps/shared/components/mail/compose/RecipientInput.tsx +1 -1
- package/apps/shared/components/mail/compose/ScheduleSendPicker.tsx +1 -1
- package/apps/shared/components/mail/compose/encryptionRequirement.ts +2 -2
- package/apps/shared/components/mail/compose/quotedBody.ts +5 -5
- package/apps/shared/components/mail/compose/recipients.ts +1 -1
- package/apps/shared/components/mail/invite/InviteRowChip.tsx +10 -14
- package/apps/shared/components/mail/invite/InviteRsvpPopover.tsx +11 -9
- package/apps/shared/components/mail/invite/InviteTimeline.tsx +1 -1
- package/apps/shared/components/mail/invite/ProposeTimeForm.tsx +2 -2
- package/apps/shared/components/mail/invite/inviteFormat.ts +2 -2
- package/apps/shared/components/mail/invite/inviteStore.ts +14 -6
- package/apps/shared/components/mail/labelMenu.tsx +9 -7
- package/apps/shared/components/mail/layout/MailShell.tsx +4 -4
- package/apps/shared/components/mail/listPreferences.ts +2 -2
- package/apps/shared/components/mail/pinnedSigners.ts +45 -19
- package/apps/shared/components/mail/reading/EncryptedBody.tsx +2 -2
- package/apps/shared/components/mail/reading/MessageBody.tsx +6 -6
- package/apps/shared/components/mail/reading/MessageCard.tsx +3 -3
- package/apps/shared/components/mail/reading/MessageSourceDialog.tsx +3 -3
- package/apps/shared/components/mail/reading/PendingMessageCard.tsx +1 -1
- package/apps/shared/components/mail/reading/bodyContent.ts +3 -3
- package/apps/shared/components/mail/reading/bodyHtml.ts +1 -1
- package/apps/shared/components/mail/reading/conversationPrint.ts +76 -0
- package/apps/shared/components/mail/reading/messageExport.ts +1 -1
- package/apps/shared/components/mail/reading/printMessage.ts +46 -9
- package/apps/shared/components/mail/reading/useMessageActions.ts +28 -21
- package/apps/shared/components/mail/unreadStyle.tsx +1 -1
- package/apps/shared/components/mail/verificationSeals.ts +16 -12
- package/apps/shared/components/mail/writableMailboxes.ts +14 -7
- package/apps/shared/components/rules/RuleBuilder.tsx +1 -1
- package/apps/shared/components/settings/SigningCertificateCard.tsx +4 -4
- package/apps/shared/components/settings/layout/SettingsShell.tsx +8 -6
- package/apps/shared/components/sharing/PrincipalListField.tsx +1 -1
- package/apps/shared/components/sharing/PrincipalPicker.tsx +1 -1
- package/apps/shared/components/sharing/PrincipalResolver.tsx +4 -4
- package/apps/shared/components/tasks/TasksSidebar.tsx +7 -5
- package/apps/shared/components/tasks/layout/TasksShell.tsx +9 -7
- package/apps/shared/keyboard/ShortcutsDialog.tsx +1 -1
- package/apps/shared/keyboard/keymap.ts +1 -0
- package/apps/shared/mail/decryptedMessages.ts +116 -0
- package/apps/shared/mail/findWellKnownFolderUid.ts +6 -4
- package/apps/shared/mail/folderCounts.ts +8 -4
- package/apps/shared/mail/folderOfType.ts +5 -3
- package/apps/shared/mail/folderTree.ts +1 -1
- package/apps/shared/mail/listSnapshots.ts +2 -2
- package/apps/shared/mail/messageReadState.ts +6 -5
- package/apps/shared/mail/newMailNotifications.ts +2 -2
- package/apps/shared/mail/outbox/composeBridge.ts +2 -2
- package/apps/shared/mail/outbox/outboxState.ts +1 -1
- package/apps/shared/mail/outbox/outgoingReplies.ts +2 -2
- package/apps/shared/mail/outbox/sendDecision.ts +2 -2
- package/apps/shared/mail/outbox/sendJob.ts +40 -35
- package/apps/shared/mail/outbox/sendOutcomes.ts +20 -15
- package/apps/shared/mail/outbox/useOutboxStatus.ts +5 -3
- package/apps/shared/mail/permanentDelete.ts +8 -7
- package/apps/shared/mail/primaryMailbox.ts +1 -1
- package/apps/shared/mail/reportNotices.ts +1 -1
- package/apps/shared/mail/senderBlocking.ts +36 -20
- package/apps/shared/mail/useMailConnection.ts +12 -10
- package/apps/shared/mail/useMailLiveUpdates.ts +3 -3
- package/apps/shared/mail/useMailboxUpdateAccess.ts +35 -11
- package/apps/shared/mail/useMarkMessageRead.ts +14 -7
- package/apps/shared/mail/useNewMailNotifications.ts +1 -1
- package/apps/shared/mail/usePermanentDelete.tsx +5 -3
- package/apps/shared/navigation/pageTitle.ts +1 -1
- package/apps/shared/notifications/NotificationCenter.tsx +1 -1
- package/apps/shared/notifications/NotificationHistoryDialog.tsx +2 -2
- package/apps/shared/notifications/apiErrors.ts +2 -2
- package/apps/shared/notifications/pushStatus.ts +1 -1
- package/apps/shared/notifications/systemErrors.ts +1 -1
- package/apps/shared/search/LocalIndexLifecycle.tsx +18 -12
- package/apps/shared/search/crossMailboxSearch.ts +3 -3
- package/apps/shared/search/localIndexBuilder.ts +24 -12
- package/apps/shared/search/localIndexKey.ts +1 -1
- package/apps/shared/search/localIndexRpcClient.ts +150 -30
- package/apps/shared/search/localIndexTransport.ts +84 -0
- package/apps/shared/search/localIndexWorker.ts +1 -1
- package/apps/shared/search/searchTier2.ts +3 -3
- package/apps/shared/signing/enrollmentTracker.ts +3 -3
- package/apps/shared/signing/enrollmentView.ts +1 -1
- package/apps/shared/signing/signingInfo.ts +1 -1
- package/apps/shared/signing/useSigningEnrollmentWatcher.ts +6 -4
- package/apps/shared/styles/app.css +14 -23
- package/apps/www/_layout.tsx +2 -2
- package/apps/www/calendar/index.tsx +20 -18
- package/apps/www/contacts/[uid].tsx +8 -6
- package/apps/www/contacts/index.tsx +19 -17
- package/apps/www/index.tsx +68 -48
- package/apps/www/messages/[uid].tsx +11 -9
- package/apps/www/settings/auto-reply/index.tsx +6 -4
- package/apps/www/settings/blocked-senders/index.tsx +9 -7
- package/apps/www/settings/encryption/index.tsx +38 -32
- package/apps/www/settings/filters/[uid].tsx +19 -14
- package/apps/www/settings/filters/_mailFilterRuleConfig.tsx +2 -2
- package/apps/www/settings/filters/index.tsx +4 -4
- package/apps/www/settings/filters/new/index.tsx +10 -8
- package/apps/www/settings/labels/index.tsx +12 -10
- package/apps/www/settings/privacy/index.tsx +18 -14
- package/apps/www/settings/profile/index.tsx +16 -11
- package/apps/www/settings/read-receipts/index.tsx +17 -12
- package/apps/www/settings/sharing/index.tsx +6 -6
- package/apps/www/settings/signatures/[uid].tsx +5 -5
- package/apps/www/settings/signatures/index.tsx +4 -4
- package/apps/www/settings/signatures/new/index.tsx +4 -4
- package/apps/www/settings/signatures/signatureDefaults.ts +1 -1
- package/apps/www/tasks/index.tsx +28 -23
- package/dist/apps/admin/_layout.d.ts +1 -1
- package/dist/apps/admin/_layout.js +1 -1
- package/dist/apps/admin/audit-log/index.d.ts +1 -1
- package/dist/apps/admin/audit-log/index.js +4 -4
- package/dist/apps/admin/branding/index.js +3 -3
- package/dist/apps/admin/data-requests/index.js +8 -8
- package/dist/apps/admin/distribution-lists/[uid].js +3 -3
- package/dist/apps/admin/distribution-lists/index.js +4 -4
- package/dist/apps/admin/distribution-lists/new/index.js +5 -5
- package/dist/apps/admin/domains/[uid].js +6 -6
- package/dist/apps/admin/domains/index.js +4 -4
- package/dist/apps/admin/domains/new/index.js +5 -5
- package/dist/apps/admin/encryption-policy/index.js +1 -1
- package/dist/apps/admin/escrow-scopes/[uid].d.ts +1 -1
- package/dist/apps/admin/escrow-scopes/[uid].js +7 -7
- package/dist/apps/admin/escrow-scopes/index.js +4 -4
- package/dist/apps/admin/escrow-scopes/new/index.js +5 -5
- package/dist/apps/admin/index.js +6 -6
- package/dist/apps/admin/ingest-queue/index.js +4 -4
- package/dist/apps/admin/mailbox-policy/index.js +1 -1
- package/dist/apps/admin/mailboxes/[uid].js +5 -5
- package/dist/apps/admin/quarantine/index.js +5 -5
- package/dist/apps/admin/retention-policy/index.js +3 -3
- package/dist/apps/admin/signing-certificates/index.js +5 -5
- package/dist/apps/admin/transport-rules/[uid].js +5 -5
- package/dist/apps/admin/transport-rules/_transportRuleConfig.d.ts +1 -1
- package/dist/apps/admin/transport-rules/_transportRuleConfig.js +2 -2
- package/dist/apps/admin/transport-rules/index.js +4 -4
- package/dist/apps/admin/transport-rules/new/index.js +5 -5
- package/dist/apps/escrow/_layout.d.ts +1 -1
- package/dist/apps/escrow/audit-log/index.d.ts +1 -1
- package/dist/apps/escrow/audit-log/index.js +4 -4
- package/dist/apps/escrow/index.js +4 -4
- package/dist/apps/escrow/matters/[uid].js +10 -10
- package/dist/apps/escrow/matters/new/index.js +6 -6
- package/dist/apps/shared/appearance/AppearanceForm.js +3 -3
- package/dist/apps/shared/appearance/AppearanceHead.js +1 -1
- package/dist/apps/shared/appearance/AppearanceProvider.d.ts +1 -1
- package/dist/apps/shared/appearance/AppearanceProvider.js +3 -3
- package/dist/apps/shared/appearance/appearanceCache.d.ts +1 -1
- package/dist/apps/shared/appearance/appearanceCache.js +1 -1
- package/dist/apps/shared/appearance/appearanceContext.d.ts +1 -1
- package/dist/apps/shared/appearance/theme.d.ts +1 -1
- package/dist/apps/shared/auth/adminAccess.js +1 -1
- package/dist/apps/shared/calendar/bookingPlugin.js +1 -1
- package/dist/apps/shared/calendar/calendarLiveUpdates.d.ts +1 -1
- package/dist/apps/shared/calendar/calendarReminders.d.ts +1 -1
- package/dist/apps/shared/calendar/useCalendarReminders.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/DiagnosticsManager.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/InstalledPlugins.d.ts +1 -1
- package/dist/apps/shared/components/admin/diagnostics/InstalledPlugins.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/LogsPanel.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/PackagesTable.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/RuntimePanel.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/SystemPanel.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/VersionsPanel.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/diagnosticsApi.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/format.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/logClient.js +1 -1
- package/dist/apps/shared/components/admin/distributionLists/MemberListCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/distributionLists/MemberListCard.js +4 -4
- package/dist/apps/shared/components/admin/elevation.js +1 -1
- package/dist/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.js +3 -3
- package/dist/apps/shared/components/admin/layout/AdminShell.d.ts +1 -1
- package/dist/apps/shared/components/admin/layout/AdminShell.js +7 -7
- package/dist/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.js +6 -6
- package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.js +10 -8
- package/dist/apps/shared/components/admin/mailboxes/LeftoverMailboxesSection.js +4 -4
- package/dist/apps/shared/components/admin/mailboxes/MailboxTable.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.js +7 -5
- package/dist/apps/shared/components/admin/mailboxes/ShareAccessCard.js +5 -5
- package/dist/apps/shared/components/admin/settings/BrandingForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/BrandingForm.js +5 -5
- package/dist/apps/shared/components/admin/settings/DomainDnsSetup.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/DomainDnsSetup.js +5 -5
- package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.js +4 -4
- package/dist/apps/shared/components/admin/settings/LoadedSettingsForm.js +2 -2
- package/dist/apps/shared/components/admin/settings/MailboxCreateForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/MailboxCreateForm.js +14 -12
- package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.js +4 -4
- package/dist/apps/shared/components/admin/settings/PluginsManager.js +5 -5
- package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.js +5 -5
- package/dist/apps/shared/components/admin/setup/EscrowSetupStep.js +7 -7
- package/dist/apps/shared/components/admin/setup/SetupWizard.d.ts +4 -4
- package/dist/apps/shared/components/admin/setup/SetupWizard.js +27 -23
- package/dist/apps/shared/components/admin/signOut.js +1 -1
- package/dist/apps/shared/components/admin/usePagedList.js +2 -2
- package/dist/apps/shared/components/calendar/AppointmentQuickForm.js +3 -3
- package/dist/apps/shared/components/calendar/CalendarListSidebar.d.ts +1 -1
- package/dist/apps/shared/components/calendar/CalendarListSidebar.js +2 -2
- package/dist/apps/shared/components/calendar/DescriptionEditor.js +1 -1
- package/dist/apps/shared/components/calendar/EventDescriptionView.js +1 -1
- package/dist/apps/shared/components/calendar/EventDetails.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventDetails.js +16 -14
- package/dist/apps/shared/components/calendar/EventEditor.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventEditor.js +22 -20
- package/dist/apps/shared/components/calendar/EventExpandedForm.js +2 -2
- package/dist/apps/shared/components/calendar/EventFormParts.d.ts +1 -1
- package/dist/apps/shared/components/calendar/EventFormParts.js +1 -1
- package/dist/apps/shared/components/calendar/EventModal.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventModal.js +3 -3
- package/dist/apps/shared/components/calendar/EventQuickForm.js +3 -3
- package/dist/apps/shared/components/calendar/EventShell.js +1 -1
- package/dist/apps/shared/components/calendar/FindATime.js +6 -4
- package/dist/apps/shared/components/calendar/GuestInput.d.ts +2 -2
- package/dist/apps/shared/components/calendar/MonthView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/MonthView.js +1 -1
- package/dist/apps/shared/components/calendar/QuickCreateFaces.js +1 -1
- package/dist/apps/shared/components/calendar/QuickFaceFrame.js +1 -1
- package/dist/apps/shared/components/calendar/RecurrenceEditor.d.ts +1 -1
- package/dist/apps/shared/components/calendar/RecurrenceEditor.js +1 -1
- package/dist/apps/shared/components/calendar/RequestChangeForm.js +8 -6
- package/dist/apps/shared/components/calendar/ResourcePicker.d.ts +1 -1
- package/dist/apps/shared/components/calendar/ResourcePicker.js +7 -5
- package/dist/apps/shared/components/calendar/SplitDayView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TaskQuickForm.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TaskQuickForm.js +9 -7
- package/dist/apps/shared/components/calendar/TimeGridView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TimeGridView.js +2 -2
- package/dist/apps/shared/components/calendar/allDay.d.ts +2 -2
- package/dist/apps/shared/components/calendar/allDay.js +1 -1
- package/dist/apps/shared/components/calendar/eventDialogFields.d.ts +2 -2
- package/dist/apps/shared/components/calendar/eventDialogFields.js +2 -2
- package/dist/apps/shared/components/calendar/eventForm.d.ts +3 -3
- package/dist/apps/shared/components/calendar/eventFormat.d.ts +1 -1
- package/dist/apps/shared/components/calendar/eventFormat.js +2 -2
- package/dist/apps/shared/components/calendar/findTimeGrid.d.ts +1 -1
- package/dist/apps/shared/components/calendar/findTimeGrid.js +1 -1
- package/dist/apps/shared/components/calendar/layout/CalendarShell.d.ts +1 -1
- package/dist/apps/shared/components/calendar/layout/CalendarShell.js +11 -9
- package/dist/apps/shared/components/contacts/ContactDetailPane.d.ts +1 -1
- package/dist/apps/shared/components/contacts/ContactDetailPane.js +2 -2
- package/dist/apps/shared/components/contacts/ContactForm.d.ts +2 -2
- package/dist/apps/shared/components/contacts/ContactForm.js +12 -8
- package/dist/apps/shared/components/contacts/ContactsSidebar.d.ts +1 -1
- package/dist/apps/shared/components/contacts/ContactsSidebar.js +7 -5
- package/dist/apps/shared/components/contacts/KeyChangeReview.d.ts +1 -1
- package/dist/apps/shared/components/contacts/KeyChangeReview.js +5 -5
- package/dist/apps/shared/components/contacts/contactKeys.d.ts +2 -2
- package/dist/apps/shared/components/contacts/contactKeys.js +2 -2
- package/dist/apps/shared/components/contacts/layout/ContactsShell.d.ts +1 -1
- package/dist/apps/shared/components/contacts/layout/ContactsShell.js +9 -7
- package/dist/apps/shared/components/escrow/layout/EscrowShell.js +6 -6
- package/dist/apps/shared/components/forms/StringListField.js +1 -1
- package/dist/apps/shared/components/layout/AppShell.d.ts +2 -2
- package/dist/apps/shared/components/layout/AppShell.js +11 -9
- package/dist/apps/shared/components/layout/BrandingChrome.d.ts +1 -1
- package/dist/apps/shared/components/layout/KeyEnrollmentGate.d.ts +1 -1
- package/dist/apps/shared/components/layout/KeyEnrollmentGate.js +9 -9
- package/dist/apps/shared/components/layout/MailboxProvisioning.js +8 -6
- package/dist/apps/shared/components/layout/RecoveryCodeUnlock.d.ts +1 -1
- package/dist/apps/shared/components/layout/RecoveryCodeUnlock.js +9 -9
- package/dist/apps/shared/components/layout/UnlockPromptProvider.d.ts +2 -2
- package/dist/apps/shared/components/layout/UnlockPromptProvider.js +5 -5
- package/dist/apps/shared/components/layout/UserMenu.js +6 -4
- package/dist/apps/shared/components/mail/ConversationList.d.ts +2 -2
- package/dist/apps/shared/components/mail/ConversationList.js +23 -8
- package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/ConversationThreadPane.js +19 -13
- package/dist/apps/shared/components/mail/InviteCard.js +10 -8
- package/dist/apps/shared/components/mail/LazyReadingPane.js +2 -2
- package/dist/apps/shared/components/mail/MailAddress.d.ts +1 -1
- package/dist/apps/shared/components/mail/MailAddress.js +1 -1
- package/dist/apps/shared/components/mail/MailListToolbar.d.ts +2 -2
- package/dist/apps/shared/components/mail/MailSelectionBar.d.ts +2 -2
- package/dist/apps/shared/components/mail/MenuButton.js +1 -1
- package/dist/apps/shared/components/mail/MessageDetailPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/MessageDetailPane.js +61 -46
- package/dist/apps/shared/components/mail/MoveToFolderDialog.d.ts +1 -1
- package/dist/apps/shared/components/mail/MoveToFolderDialog.js +8 -6
- package/dist/apps/shared/components/mail/OutboxRowStatus.d.ts +1 -1
- package/dist/apps/shared/components/mail/PermanentDeleteDialog.js +2 -2
- package/dist/apps/shared/components/mail/compose/ComposeContext.d.ts +10 -1
- package/dist/apps/shared/components/mail/compose/ComposeContext.js +4 -2
- package/dist/apps/shared/components/mail/compose/ComposeWindow.js +34 -30
- package/dist/apps/shared/components/mail/compose/ComposeWindowPlaceholder.js +4 -4
- package/dist/apps/shared/components/mail/compose/EmojiPicker.js +2 -2
- package/dist/apps/shared/components/mail/compose/GifPicker.js +3 -3
- package/dist/apps/shared/components/mail/compose/RecipientInput.d.ts +1 -1
- package/dist/apps/shared/components/mail/compose/RecipientInput.js +1 -1
- package/dist/apps/shared/components/mail/compose/ScheduleSendPicker.js +1 -1
- package/dist/apps/shared/components/mail/compose/encryptionRequirement.d.ts +2 -2
- package/dist/apps/shared/components/mail/compose/encryptionRequirement.js +1 -1
- package/dist/apps/shared/components/mail/compose/quotedBody.d.ts +3 -3
- package/dist/apps/shared/components/mail/compose/quotedBody.js +3 -3
- package/dist/apps/shared/components/mail/compose/recipients.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRowChip.d.ts +3 -3
- package/dist/apps/shared/components/mail/invite/InviteRowChip.js +7 -9
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.d.ts +2 -2
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.js +11 -9
- package/dist/apps/shared/components/mail/invite/InviteTimeline.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.js +1 -1
- package/dist/apps/shared/components/mail/invite/inviteFormat.d.ts +2 -2
- package/dist/apps/shared/components/mail/invite/inviteStore.d.ts +9 -3
- package/dist/apps/shared/components/mail/invite/inviteStore.js +13 -6
- package/dist/apps/shared/components/mail/labelMenu.d.ts +1 -1
- package/dist/apps/shared/components/mail/labelMenu.js +9 -7
- package/dist/apps/shared/components/mail/layout/MailShell.d.ts +1 -1
- package/dist/apps/shared/components/mail/layout/MailShell.js +3 -3
- package/dist/apps/shared/components/mail/listPreferences.d.ts +2 -2
- package/dist/apps/shared/components/mail/listPreferences.js +1 -1
- package/dist/apps/shared/components/mail/pinnedSigners.d.ts +12 -5
- package/dist/apps/shared/components/mail/pinnedSigners.js +37 -18
- package/dist/apps/shared/components/mail/reading/EncryptedBody.js +2 -2
- package/dist/apps/shared/components/mail/reading/MessageBody.d.ts +2 -2
- package/dist/apps/shared/components/mail/reading/MessageBody.js +4 -4
- package/dist/apps/shared/components/mail/reading/MessageCard.d.ts +1 -1
- package/dist/apps/shared/components/mail/reading/MessageCard.js +2 -2
- package/dist/apps/shared/components/mail/reading/MessageSourceDialog.js +3 -3
- package/dist/apps/shared/components/mail/reading/PendingMessageCard.js +1 -1
- package/dist/apps/shared/components/mail/reading/bodyContent.d.ts +2 -2
- package/dist/apps/shared/components/mail/reading/bodyContent.js +2 -2
- package/dist/apps/shared/components/mail/reading/bodyHtml.js +1 -1
- package/dist/apps/shared/components/mail/reading/conversationPrint.d.ts +15 -0
- package/dist/apps/shared/components/mail/reading/conversationPrint.js +69 -0
- package/dist/apps/shared/components/mail/reading/messageExport.js +1 -1
- package/dist/apps/shared/components/mail/reading/printMessage.d.ts +9 -3
- package/dist/apps/shared/components/mail/reading/printMessage.js +33 -6
- package/dist/apps/shared/components/mail/reading/useMessageActions.d.ts +1 -1
- package/dist/apps/shared/components/mail/reading/useMessageActions.js +18 -16
- package/dist/apps/shared/components/mail/unreadStyle.d.ts +1 -1
- package/dist/apps/shared/components/mail/verificationSeals.d.ts +27 -6
- package/dist/apps/shared/components/mail/verificationSeals.js +15 -11
- package/dist/apps/shared/components/mail/writableMailboxes.d.ts +8 -3
- package/dist/apps/shared/components/mail/writableMailboxes.js +12 -6
- package/dist/apps/shared/components/rules/RuleBuilder.js +1 -1
- package/dist/apps/shared/components/settings/SigningCertificateCard.d.ts +1 -1
- package/dist/apps/shared/components/settings/SigningCertificateCard.js +3 -3
- package/dist/apps/shared/components/settings/layout/SettingsShell.d.ts +1 -1
- package/dist/apps/shared/components/settings/layout/SettingsShell.js +8 -6
- package/dist/apps/shared/components/sharing/PrincipalListField.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalPicker.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalPicker.js +1 -1
- package/dist/apps/shared/components/sharing/PrincipalResolver.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalResolver.js +3 -3
- package/dist/apps/shared/components/tasks/TasksSidebar.d.ts +1 -1
- package/dist/apps/shared/components/tasks/TasksSidebar.js +7 -5
- package/dist/apps/shared/components/tasks/layout/TasksShell.d.ts +1 -1
- package/dist/apps/shared/components/tasks/layout/TasksShell.js +9 -7
- package/dist/apps/shared/keyboard/ShortcutsDialog.js +1 -1
- package/dist/apps/shared/keyboard/keymap.d.ts +6 -0
- package/dist/apps/shared/keyboard/keymap.js +1 -0
- package/dist/apps/shared/mail/decryptedMessages.d.ts +27 -0
- package/dist/apps/shared/mail/decryptedMessages.js +97 -0
- package/dist/apps/shared/mail/findWellKnownFolderUid.d.ts +5 -3
- package/dist/apps/shared/mail/findWellKnownFolderUid.js +5 -4
- package/dist/apps/shared/mail/folderCounts.d.ts +1 -1
- package/dist/apps/shared/mail/folderCounts.js +6 -4
- package/dist/apps/shared/mail/folderOfType.d.ts +3 -2
- package/dist/apps/shared/mail/folderOfType.js +4 -4
- package/dist/apps/shared/mail/folderTree.d.ts +1 -1
- package/dist/apps/shared/mail/listSnapshots.d.ts +2 -2
- package/dist/apps/shared/mail/messageReadState.d.ts +4 -3
- package/dist/apps/shared/mail/messageReadState.js +5 -5
- package/dist/apps/shared/mail/newMailNotifications.d.ts +1 -1
- package/dist/apps/shared/mail/newMailNotifications.js +1 -1
- package/dist/apps/shared/mail/outbox/composeBridge.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/outboxState.d.ts +1 -1
- package/dist/apps/shared/mail/outbox/outgoingReplies.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/sendDecision.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/sendDecision.js +1 -1
- package/dist/apps/shared/mail/outbox/sendJob.d.ts +10 -6
- package/dist/apps/shared/mail/outbox/sendJob.js +39 -35
- package/dist/apps/shared/mail/outbox/sendOutcomes.d.ts +6 -3
- package/dist/apps/shared/mail/outbox/sendOutcomes.js +19 -15
- package/dist/apps/shared/mail/outbox/useOutboxStatus.js +5 -3
- package/dist/apps/shared/mail/permanentDelete.d.ts +4 -3
- package/dist/apps/shared/mail/permanentDelete.js +8 -8
- package/dist/apps/shared/mail/primaryMailbox.d.ts +1 -1
- package/dist/apps/shared/mail/primaryMailbox.js +1 -1
- package/dist/apps/shared/mail/reportNotices.d.ts +1 -1
- package/dist/apps/shared/mail/senderBlocking.d.ts +5 -4
- package/dist/apps/shared/mail/senderBlocking.js +19 -16
- package/dist/apps/shared/mail/useMailConnection.d.ts +1 -1
- package/dist/apps/shared/mail/useMailConnection.js +12 -10
- package/dist/apps/shared/mail/useMailLiveUpdates.d.ts +2 -2
- package/dist/apps/shared/mail/useMailLiveUpdates.js +2 -2
- package/dist/apps/shared/mail/useMailboxUpdateAccess.d.ts +3 -2
- package/dist/apps/shared/mail/useMailboxUpdateAccess.js +31 -10
- package/dist/apps/shared/mail/useMarkMessageRead.d.ts +1 -1
- package/dist/apps/shared/mail/useMarkMessageRead.js +5 -3
- package/dist/apps/shared/mail/useNewMailNotifications.d.ts +1 -1
- package/dist/apps/shared/mail/usePermanentDelete.d.ts +1 -1
- package/dist/apps/shared/mail/usePermanentDelete.js +4 -2
- package/dist/apps/shared/navigation/pageTitle.d.ts +1 -1
- package/dist/apps/shared/notifications/NotificationCenter.js +1 -1
- package/dist/apps/shared/notifications/NotificationHistoryDialog.js +2 -2
- package/dist/apps/shared/notifications/apiErrors.js +2 -2
- package/dist/apps/shared/notifications/pushStatus.js +1 -1
- package/dist/apps/shared/notifications/systemErrors.js +1 -1
- package/dist/apps/shared/search/LocalIndexLifecycle.d.ts +2 -2
- package/dist/apps/shared/search/LocalIndexLifecycle.js +15 -10
- package/dist/apps/shared/search/crossMailboxSearch.d.ts +1 -1
- package/dist/apps/shared/search/crossMailboxSearch.js +2 -2
- package/dist/apps/shared/search/localIndexBuilder.d.ts +4 -3
- package/dist/apps/shared/search/localIndexBuilder.js +15 -12
- package/dist/apps/shared/search/localIndexKey.js +1 -1
- package/dist/apps/shared/search/localIndexRpcClient.d.ts +43 -31
- package/dist/apps/shared/search/localIndexRpcClient.js +113 -20
- package/dist/apps/shared/search/localIndexTransport.d.ts +77 -0
- package/dist/apps/shared/search/localIndexTransport.js +1 -0
- package/dist/apps/shared/search/localIndexWorker.d.ts +1 -1
- package/dist/apps/shared/search/searchTier2.d.ts +3 -3
- package/dist/apps/shared/signing/enrollmentTracker.d.ts +1 -1
- package/dist/apps/shared/signing/enrollmentTracker.js +3 -3
- package/dist/apps/shared/signing/enrollmentView.d.ts +1 -1
- package/dist/apps/shared/signing/signingInfo.d.ts +1 -1
- package/dist/apps/shared/signing/signingInfo.js +1 -1
- package/dist/apps/shared/signing/useSigningEnrollmentWatcher.d.ts +1 -1
- package/dist/apps/shared/signing/useSigningEnrollmentWatcher.js +5 -3
- package/dist/apps/shared/styles/app.css +14 -23
- package/dist/apps/www/_layout.d.ts +1 -1
- package/dist/apps/www/_layout.js +1 -1
- package/dist/apps/www/calendar/index.d.ts +1 -1
- package/dist/apps/www/calendar/index.js +20 -18
- package/dist/apps/www/contacts/[uid].d.ts +1 -1
- package/dist/apps/www/contacts/[uid].js +8 -6
- package/dist/apps/www/contacts/index.d.ts +1 -1
- package/dist/apps/www/contacts/index.js +19 -17
- package/dist/apps/www/index.d.ts +1 -1
- package/dist/apps/www/index.js +64 -50
- package/dist/apps/www/messages/[uid].d.ts +1 -1
- package/dist/apps/www/messages/[uid].js +11 -9
- package/dist/apps/www/settings/appearance/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.js +6 -4
- package/dist/apps/www/settings/blocked-senders/index.d.ts +1 -1
- package/dist/apps/www/settings/blocked-senders/index.js +6 -4
- package/dist/apps/www/settings/encryption/index.d.ts +1 -1
- package/dist/apps/www/settings/encryption/index.js +31 -29
- package/dist/apps/www/settings/filters/[uid].d.ts +1 -1
- package/dist/apps/www/settings/filters/[uid].js +11 -9
- package/dist/apps/www/settings/filters/_mailFilterRuleConfig.d.ts +2 -2
- package/dist/apps/www/settings/filters/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/index.js +4 -4
- package/dist/apps/www/settings/filters/new/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/new/index.js +10 -8
- package/dist/apps/www/settings/labels/index.d.ts +1 -1
- package/dist/apps/www/settings/labels/index.js +12 -10
- package/dist/apps/www/settings/privacy/index.d.ts +1 -1
- package/dist/apps/www/settings/privacy/index.js +18 -14
- package/dist/apps/www/settings/profile/index.d.ts +1 -1
- package/dist/apps/www/settings/profile/index.js +7 -5
- package/dist/apps/www/settings/read-receipts/index.d.ts +1 -1
- package/dist/apps/www/settings/read-receipts/index.js +5 -3
- package/dist/apps/www/settings/sharing/index.d.ts +1 -1
- package/dist/apps/www/settings/sharing/index.js +6 -6
- package/dist/apps/www/settings/signatures/[uid].d.ts +1 -1
- package/dist/apps/www/settings/signatures/[uid].js +5 -5
- package/dist/apps/www/settings/signatures/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/index.js +4 -4
- package/dist/apps/www/settings/signatures/new/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/new/index.js +4 -4
- package/dist/apps/www/settings/signatures/signatureDefaults.d.ts +1 -1
- package/dist/apps/www/settings/signatures/signatureDefaults.js +1 -1
- package/dist/apps/www/tasks/index.d.ts +1 -1
- package/dist/apps/www/tasks/index.js +17 -15
- package/dist/lib/admin/auditLogApi.d.ts +32 -0
- package/dist/lib/admin/auditLogApi.js +27 -0
- package/dist/lib/admin/distributionListsApi.d.ts +47 -0
- package/dist/lib/admin/distributionListsApi.js +34 -0
- package/dist/lib/admin/domainsApi.d.ts +75 -0
- package/dist/lib/admin/domainsApi.js +44 -0
- package/dist/lib/admin/escrowAccessRequestsApi.d.ts +79 -0
- package/dist/lib/admin/escrowAccessRequestsApi.js +46 -0
- package/dist/lib/admin/escrowAuditLogApi.d.ts +66 -0
- package/dist/lib/admin/escrowAuditLogApi.js +31 -0
- package/dist/lib/admin/escrowScopesApi.d.ts +78 -0
- package/dist/lib/admin/escrowScopesApi.js +50 -0
- package/dist/lib/admin/leftoverMailboxApi.d.ts +73 -0
- package/dist/lib/admin/leftoverMailboxApi.js +67 -0
- package/dist/lib/admin/mailboxPolicyApi.d.ts +27 -0
- package/dist/lib/admin/mailboxPolicyApi.js +21 -0
- package/dist/lib/admin/matterExportApi.d.ts +40 -0
- package/dist/lib/admin/matterExportApi.js +39 -0
- package/dist/lib/admin/matterSearchApi.d.ts +20 -0
- package/dist/lib/admin/matterSearchApi.js +27 -0
- package/dist/lib/admin/mattersApi.d.ts +56 -0
- package/dist/lib/admin/mattersApi.js +40 -0
- package/dist/lib/admin/pluginsApi.d.ts +265 -0
- package/dist/lib/admin/pluginsApi.js +102 -0
- package/dist/lib/admin/retentionPolicyApi.d.ts +32 -0
- package/dist/lib/admin/retentionPolicyApi.js +29 -0
- package/dist/lib/admin/setupApi.d.ts +23 -0
- package/dist/lib/admin/setupApi.js +26 -0
- package/dist/lib/admin/transportRulesApi.d.ts +66 -0
- package/dist/lib/admin/transportRulesApi.js +43 -0
- package/dist/lib/appearance/preferencesApi.d.ts +128 -0
- package/dist/lib/appearance/preferencesApi.js +257 -0
- package/dist/lib/auth/profileApi.d.ts +33 -0
- package/dist/lib/auth/profileApi.js +52 -0
- package/dist/lib/auth/session.d.ts +70 -0
- package/dist/lib/auth/session.js +210 -0
- package/dist/lib/branding/brandingApi.d.ts +47 -0
- package/dist/lib/branding/brandingApi.js +61 -0
- package/dist/lib/branding/useBranding.d.ts +23 -0
- package/dist/lib/branding/useBranding.js +65 -0
- package/dist/lib/calendar/calendarApi.d.ts +230 -0
- package/dist/lib/calendar/calendarApi.js +106 -0
- package/dist/lib/calendar/calendarColors.d.ts +18 -0
- package/dist/lib/calendar/calendarColors.js +39 -0
- package/dist/lib/calendar/calendarDragIds.d.ts +42 -0
- package/dist/lib/calendar/calendarDragIds.js +92 -0
- package/dist/lib/calendar/calendarMutations.d.ts +68 -0
- package/dist/lib/calendar/calendarMutations.js +190 -0
- package/dist/lib/calendar/eventDescription.d.ts +43 -0
- package/dist/lib/calendar/eventDescription.js +195 -0
- package/dist/lib/calendar/freeBusyApi.d.ts +100 -0
- package/dist/lib/calendar/freeBusyApi.js +119 -0
- package/dist/lib/calendar/inviteApi.d.ts +121 -0
- package/dist/lib/calendar/inviteApi.js +54 -0
- package/dist/lib/calendar/recurrence.d.ts +60 -0
- package/dist/lib/calendar/recurrence.js +225 -0
- package/dist/lib/components/avatar/ContactAvatar.d.ts +8 -0
- package/dist/lib/components/avatar/ContactAvatar.js +26 -0
- package/dist/lib/components/buttons/Button.d.ts +9 -0
- package/dist/lib/components/buttons/Button.js +14 -0
- package/dist/lib/components/buttons/CopyButton.d.ts +18 -0
- package/dist/lib/components/buttons/CopyButton.js +14 -0
- package/dist/lib/components/feedback/Alert.d.ts +4 -0
- package/dist/lib/components/feedback/Alert.js +4 -0
- package/dist/lib/components/feedback/Skeleton.d.ts +21 -0
- package/dist/lib/components/feedback/Skeleton.js +14 -0
- package/dist/lib/components/forms/FormField.d.ts +8 -0
- package/dist/lib/components/forms/FormField.js +5 -0
- package/dist/lib/components/navigation/BottomTabBar.d.ts +27 -0
- package/dist/lib/components/navigation/BottomTabBar.js +32 -0
- package/dist/lib/components/overlays/Drawer.d.ts +20 -0
- package/dist/lib/components/overlays/Drawer.js +27 -0
- package/dist/lib/components/overlays/Modal.d.ts +17 -0
- package/dist/lib/components/overlays/Modal.js +25 -0
- package/dist/lib/components/overlays/PopoverPortal.d.ts +23 -0
- package/dist/lib/components/overlays/PopoverPortal.js +53 -0
- package/dist/lib/components/overlays/overlayStack.d.ts +31 -0
- package/dist/lib/components/overlays/overlayStack.js +143 -0
- package/dist/lib/components/pickers/MiniDatePicker.d.ts +13 -0
- package/dist/lib/components/pickers/MiniDatePicker.js +42 -0
- package/dist/lib/contacts/contactsApi.d.ts +174 -0
- package/dist/lib/contacts/contactsApi.js +139 -0
- package/dist/lib/contacts/vcard.d.ts +23 -0
- package/dist/lib/contacts/vcard.js +179 -0
- package/dist/lib/crypto/composeSecurity.d.ts +67 -0
- package/dist/lib/crypto/composeSecurity.js +93 -0
- package/dist/lib/crypto/encoding.d.ts +9 -0
- package/dist/lib/crypto/encoding.js +32 -0
- package/dist/lib/crypto/escrowKeys.d.ts +25 -0
- package/dist/lib/crypto/escrowKeys.js +59 -0
- package/dist/lib/crypto/idleTimeout.d.ts +16 -0
- package/dist/lib/crypto/idleTimeout.js +47 -0
- package/dist/lib/crypto/keySession.d.ts +159 -0
- package/dist/lib/crypto/keySession.js +367 -0
- package/dist/lib/crypto/keys.d.ts +50 -0
- package/dist/lib/crypto/keys.js +89 -0
- package/dist/lib/crypto/keyvaultApi.d.ts +394 -0
- package/dist/lib/crypto/keyvaultApi.js +350 -0
- package/dist/lib/crypto/masterKey.d.ts +59 -0
- package/dist/lib/crypto/masterKey.js +104 -0
- package/dist/lib/crypto/masterKeyWraps.d.ts +108 -0
- package/dist/lib/crypto/masterKeyWraps.js +228 -0
- package/dist/lib/crypto/messageSecurity.d.ts +248 -0
- package/dist/lib/crypto/messageSecurity.js +367 -0
- package/dist/lib/crypto/mime.d.ts +143 -0
- package/dist/lib/crypto/mime.js +504 -0
- package/dist/lib/crypto/passkeyUnlock.d.ts +20 -0
- package/dist/lib/crypto/passkeyUnlock.js +79 -0
- package/dist/lib/crypto/passwordUnlock.d.ts +39 -0
- package/dist/lib/crypto/passwordUnlock.js +73 -0
- package/dist/lib/crypto/recoveryCode.d.ts +28 -0
- package/dist/lib/crypto/recoveryCode.js +86 -0
- package/dist/lib/crypto/signingProviderApi.d.ts +95 -0
- package/dist/lib/crypto/signingProviderApi.js +60 -0
- package/dist/lib/crypto/smime.d.ts +128 -0
- package/dist/lib/crypto/smime.js +402 -0
- package/dist/lib/crypto/smimeMessage.d.ts +132 -0
- package/dist/lib/crypto/smimeMessage.js +341 -0
- package/dist/lib/crypto/useIdleKeyTimeout.d.ts +10 -0
- package/dist/lib/crypto/useIdleKeyTimeout.js +163 -0
- package/dist/lib/crypto/verificationSeal.d.ts +56 -0
- package/dist/lib/crypto/verificationSeal.js +220 -0
- package/dist/lib/mail/compose/composeQuoting.d.ts +88 -0
- package/dist/lib/mail/compose/composeQuoting.js +204 -0
- package/dist/lib/mail/compose/emojiData.d.ts +9 -0
- package/dist/lib/mail/compose/emojiData.js +18 -0
- package/dist/lib/mail/compose/giphyApi.d.ts +17 -0
- package/dist/lib/mail/compose/giphyApi.js +20 -0
- package/dist/lib/mail/conversationsApi.d.ts +80 -0
- package/dist/lib/mail/conversationsApi.js +44 -0
- package/dist/lib/mail/dataExportApi.d.ts +50 -0
- package/dist/lib/mail/dataExportApi.js +40 -0
- package/dist/lib/mail/directoryApi.d.ts +49 -0
- package/dist/lib/mail/directoryApi.js +101 -0
- package/dist/lib/mail/erasureRequestApi.d.ts +45 -0
- package/dist/lib/mail/erasureRequestApi.js +43 -0
- package/dist/lib/mail/flaggedMessages.d.ts +22 -0
- package/dist/lib/mail/flaggedMessages.js +73 -0
- package/dist/lib/mail/focusedInboxOverridesApi.d.ts +37 -0
- package/dist/lib/mail/focusedInboxOverridesApi.js +34 -0
- package/dist/lib/mail/labelsApi.d.ts +47 -0
- package/dist/lib/mail/labelsApi.js +38 -0
- package/dist/lib/mail/mailAddress.d.ts +27 -0
- package/dist/lib/mail/mailAddress.js +54 -0
- package/dist/lib/mail/mailApi.d.ts +850 -0
- package/dist/lib/mail/mailApi.js +602 -0
- package/dist/lib/mail/mailDetailHooks.d.ts +10 -0
- package/dist/lib/mail/mailDetailHooks.js +53 -0
- package/dist/lib/mail/mailFilterRulesApi.d.ts +76 -0
- package/dist/lib/mail/mailFilterRulesApi.js +45 -0
- package/dist/lib/mail/mailSignaturesApi.d.ts +49 -0
- package/dist/lib/mail/mailSignaturesApi.js +42 -0
- package/dist/lib/mail/mailboxAccessApi.d.ts +74 -0
- package/dist/lib/mail/mailboxAccessApi.js +56 -0
- package/dist/lib/mail/mailboxImportApi.d.ts +53 -0
- package/dist/lib/mail/mailboxImportApi.js +51 -0
- package/dist/lib/mail/messageBodySanitizer.d.ts +16 -0
- package/dist/lib/mail/messageBodySanitizer.js +118 -0
- package/dist/lib/mail/pushClient.d.ts +106 -0
- package/dist/lib/mail/pushClient.js +317 -0
- package/dist/lib/mail/sendEvents.d.ts +33 -0
- package/dist/lib/mail/sendEvents.js +44 -0
- package/dist/lib/mail/sendFailure.d.ts +16 -0
- package/dist/lib/mail/sendFailure.js +86 -0
- package/dist/lib/mail/senderListsApi.d.ts +69 -0
- package/dist/lib/mail/senderListsApi.js +126 -0
- package/dist/lib/search/queryGrammar.d.ts +51 -0
- package/dist/lib/search/queryGrammar.js +111 -0
- package/dist/lib/search/searchApi.d.ts +100 -0
- package/dist/lib/search/searchApi.js +107 -0
- package/dist/lib/search/searchScoring.d.ts +34 -0
- package/dist/lib/search/searchScoring.js +44 -0
- package/dist/lib/search/searchTier3.d.ts +64 -0
- package/dist/lib/search/searchTier3.js +335 -0
- package/dist/lib/tasks/tasksApi.d.ts +85 -0
- package/dist/lib/tasks/tasksApi.js +55 -0
- package/dist/lib/util/api.d.ts +160 -0
- package/dist/lib/util/api.js +251 -0
- package/dist/lib/util/apiClientContext.d.ts +7 -0
- package/dist/lib/util/apiClientContext.js +32 -0
- package/dist/lib/util/apiQuery.d.ts +32 -0
- package/dist/lib/util/apiQuery.js +42 -0
- package/dist/lib/util/clipboard.d.ts +7 -0
- package/dist/lib/util/clipboard.js +56 -0
- package/dist/lib/util/dateInput.d.ts +6 -0
- package/dist/lib/util/dateInput.js +14 -0
- package/dist/lib/util/timeZone.d.ts +12 -0
- package/dist/lib/util/timeZone.js +32 -0
- package/dist/lib/util/useCopyToClipboard.d.ts +12 -0
- package/dist/lib/util/useCopyToClipboard.js +34 -0
- package/dist/lib/util/useIsMobile.d.ts +10 -0
- package/dist/lib/util/useIsMobile.js +29 -0
- package/dist/lib/videoconf/videoMeetingsApi.d.ts +116 -0
- package/dist/lib/videoconf/videoMeetingsApi.js +49 -0
- package/lib/admin/auditLogApi.ts +48 -0
- package/lib/admin/distributionListsApi.ts +77 -0
- package/lib/admin/domainsApi.ts +113 -0
- package/lib/admin/escrowAccessRequestsApi.ts +110 -0
- package/lib/admin/escrowAuditLogApi.ts +101 -0
- package/lib/admin/escrowScopesApi.ts +112 -0
- package/lib/admin/leftoverMailboxApi.ts +120 -0
- package/lib/admin/mailboxPolicyApi.ts +38 -0
- package/lib/admin/matterExportApi.ts +62 -0
- package/lib/admin/matterSearchApi.ts +35 -0
- package/lib/admin/mattersApi.ts +86 -0
- package/lib/admin/pluginsApi.ts +339 -0
- package/lib/admin/retentionPolicyApi.ts +46 -0
- package/lib/admin/setupApi.ts +40 -0
- package/lib/admin/transportRulesApi.ts +106 -0
- package/lib/appearance/preferencesApi.ts +335 -0
- package/lib/auth/profileApi.ts +77 -0
- package/lib/auth/session.ts +238 -0
- package/lib/branding/brandingApi.ts +97 -0
- package/lib/branding/useBranding.ts +81 -0
- package/lib/calendar/calendarApi.ts +309 -0
- package/lib/calendar/calendarColors.ts +45 -0
- package/lib/calendar/calendarDragIds.ts +112 -0
- package/lib/calendar/calendarMutations.ts +236 -0
- package/lib/calendar/eventDescription.ts +211 -0
- package/lib/calendar/freeBusyApi.ts +197 -0
- package/lib/calendar/inviteApi.ts +154 -0
- package/lib/calendar/recurrence.ts +285 -0
- package/lib/components/avatar/ContactAvatar.tsx +47 -0
- package/lib/components/buttons/Button.tsx +40 -0
- package/lib/components/buttons/CopyButton.tsx +45 -0
- package/lib/components/feedback/Alert.tsx +13 -0
- package/lib/components/feedback/Skeleton.tsx +38 -0
- package/lib/components/forms/FormField.tsx +23 -0
- package/lib/components/navigation/BottomTabBar.tsx +66 -0
- package/lib/components/overlays/Drawer.tsx +72 -0
- package/lib/components/overlays/Modal.tsx +64 -0
- package/lib/components/overlays/PopoverPortal.tsx +74 -0
- package/lib/components/overlays/overlayStack.ts +165 -0
- package/lib/components/pickers/MiniDatePicker.tsx +90 -0
- package/lib/contacts/contactsApi.ts +289 -0
- package/lib/contacts/vcard.ts +197 -0
- package/lib/crypto/composeSecurity.ts +140 -0
- package/lib/crypto/encoding.ts +36 -0
- package/lib/crypto/escrowKeys.ts +74 -0
- package/lib/crypto/idleTimeout.ts +49 -0
- package/lib/crypto/keySession.ts +483 -0
- package/lib/crypto/keys.ts +105 -0
- package/lib/crypto/keyvaultApi.ts +674 -0
- package/lib/crypto/masterKey.ts +134 -0
- package/lib/crypto/masterKeyWraps.ts +269 -0
- package/lib/crypto/messageSecurity.ts +600 -0
- package/lib/crypto/mime.ts +568 -0
- package/lib/crypto/passkeyUnlock.ts +103 -0
- package/lib/crypto/passwordUnlock.ts +98 -0
- package/lib/crypto/recoveryCode.ts +93 -0
- package/lib/crypto/signingProviderApi.ts +135 -0
- package/lib/crypto/smime.ts +459 -0
- package/lib/crypto/smimeMessage.ts +491 -0
- package/lib/crypto/useIdleKeyTimeout.ts +176 -0
- package/lib/crypto/verificationSeal.ts +288 -0
- package/lib/mail/compose/composeQuoting.ts +243 -0
- package/lib/mail/compose/emojiData.ts +34 -0
- package/lib/mail/compose/giphyApi.ts +31 -0
- package/lib/mail/conversationsApi.ts +123 -0
- package/lib/mail/dataExportApi.ts +73 -0
- package/lib/mail/directoryApi.ts +161 -0
- package/lib/mail/erasureRequestApi.ts +71 -0
- package/lib/mail/flaggedMessages.ts +80 -0
- package/lib/mail/focusedInboxOverridesApi.ts +64 -0
- package/lib/mail/labelsApi.ts +71 -0
- package/lib/mail/mailAddress.ts +76 -0
- package/lib/mail/mailApi.ts +1286 -0
- package/lib/mail/mailDetailHooks.ts +57 -0
- package/lib/mail/mailFilterRulesApi.ts +116 -0
- package/lib/mail/mailSignaturesApi.ts +84 -0
- package/lib/mail/mailboxAccessApi.ts +106 -0
- package/lib/mail/mailboxImportApi.ts +87 -0
- package/lib/mail/messageBodySanitizer.ts +129 -0
- package/lib/mail/pushClient.ts +375 -0
- package/lib/mail/sendEvents.ts +72 -0
- package/lib/mail/sendFailure.ts +98 -0
- package/lib/mail/senderListsApi.ts +161 -0
- package/lib/search/queryGrammar.ts +179 -0
- package/lib/search/searchApi.ts +199 -0
- package/lib/search/searchScoring.ts +46 -0
- package/lib/search/searchTier3.ts +406 -0
- package/lib/tasks/tasksApi.ts +128 -0
- package/lib/util/api.ts +318 -0
- package/lib/util/apiClientContext.ts +35 -0
- package/lib/util/apiQuery.ts +61 -0
- package/lib/util/clipboard.ts +55 -0
- package/lib/util/dateInput.ts +15 -0
- package/lib/util/timeZone.ts +33 -0
- package/lib/util/useCopyToClipboard.ts +48 -0
- package/lib/util/useIsMobile.ts +34 -0
- package/lib/videoconf/videoMeetingsApi.ts +144 -0
- package/package.json +10 -4
package/apps/www/index.tsx
CHANGED
|
@@ -9,7 +9,7 @@ import { prefetchComposeWindow } from "../shared/components/mail/compose/Compose
|
|
|
9
9
|
import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
10
10
|
import { createPortal } from "react-dom";
|
|
11
11
|
import { HiOutlineFlag, HiOutlineLockClosed, HiOutlinePaperClip } from "react-icons/hi2";
|
|
12
|
-
import { ApiRequestError } from "
|
|
12
|
+
import { ApiClient, ApiRequestError } from "../../lib/util/api.js";
|
|
13
13
|
import {
|
|
14
14
|
Folder,
|
|
15
15
|
Mailbox,
|
|
@@ -25,16 +25,17 @@ import {
|
|
|
25
25
|
listMessages,
|
|
26
26
|
moveMessages,
|
|
27
27
|
setMessagesFlagged,
|
|
28
|
-
} from "
|
|
29
|
-
import { Label, listLabels } from "
|
|
28
|
+
} from "../../lib/mail/mailApi.js";
|
|
29
|
+
import { Label, listLabels } from "../../lib/mail/labelsApi.js";
|
|
30
30
|
import {
|
|
31
31
|
ConversationListParams,
|
|
32
32
|
ConversationSummary,
|
|
33
33
|
listConversationMessages,
|
|
34
34
|
listConversations,
|
|
35
|
-
} from "
|
|
36
|
-
import { SearchResult, search as searchMailbox } from "
|
|
37
|
-
import {
|
|
35
|
+
} from "../../lib/mail/conversationsApi.js";
|
|
36
|
+
import { SearchResult, search as searchMailbox } from "../../lib/search/searchApi.js";
|
|
37
|
+
import { useApiClient } from "../../lib/util/apiClientContext.js";
|
|
38
|
+
import { parseSearchQuery, type ParsedSearchQuery } from "../../lib/search/queryGrammar.js";
|
|
38
39
|
import { searchLocalIndex } from "../shared/search/searchTier2.js";
|
|
39
40
|
import {
|
|
40
41
|
MailboxFailure,
|
|
@@ -50,9 +51,9 @@ import {
|
|
|
50
51
|
withTimeout,
|
|
51
52
|
} from "../shared/search/crossMailboxSearch.js";
|
|
52
53
|
import type { Coverage } from "../shared/search/localIndexWorker.js";
|
|
53
|
-
import { getUnlockedKeys, subscribeKeySession, UnlockedKeys } from "
|
|
54
|
-
import { useMessageAttachments } from "
|
|
55
|
-
import useIsMobile from "
|
|
54
|
+
import { getUnlockedKeys, subscribeKeySession, UnlockedKeys } from "../../lib/crypto/keySession.js";
|
|
55
|
+
import { useMessageAttachments } from "../../lib/mail/mailDetailHooks.js";
|
|
56
|
+
import useIsMobile from "../../lib/util/useIsMobile.js";
|
|
56
57
|
import MailShell, {
|
|
57
58
|
AggregateFolderType,
|
|
58
59
|
MailboxFolders,
|
|
@@ -68,6 +69,7 @@ import { setReadStateMany } from "../shared/mail/messageReadState.js";
|
|
|
68
69
|
import { useMarkMessageRead } from "../shared/mail/useMarkMessageRead.js";
|
|
69
70
|
import { ROW_FOCUS_CLASS, UnreadBar, UnreadLabel, dateClass, isUnread, rowClass, senderClass, subjectClass } from "../shared/components/mail/unreadStyle.js";
|
|
70
71
|
import { LazyConversationThreadPane, LazyMessageDetailPane, prefetchReadingPane } from "../shared/components/mail/LazyReadingPane.js";
|
|
72
|
+
import { rememberDecrypted } from "../shared/mail/decryptedMessages.js";
|
|
71
73
|
import ConversationList, { ListedConversation, conversationRowKey } from "../shared/components/mail/ConversationList.js";
|
|
72
74
|
import type { ConversationThreadHead } from "../shared/components/mail/ConversationThreadPane.js";
|
|
73
75
|
import SwipeRow from "../shared/components/mail/SwipeRow.js";
|
|
@@ -89,8 +91,8 @@ import {
|
|
|
89
91
|
setMailListPreferences,
|
|
90
92
|
sortConversations,
|
|
91
93
|
} from "../shared/components/mail/listPreferences.js";
|
|
92
|
-
import Alert from "
|
|
93
|
-
import Skeleton, { SkeletonList } from "
|
|
94
|
+
import Alert from "../../lib/components/feedback/Alert.js";
|
|
95
|
+
import Skeleton, { SkeletonList } from "../../lib/components/feedback/Skeleton.js";
|
|
94
96
|
import { useUnlockPrompt } from "../shared/components/layout/UnlockPromptProvider.js";
|
|
95
97
|
import { SHORTCUTS } from "../shared/keyboard/keymap.js";
|
|
96
98
|
import { isActivatable } from "../shared/keyboard/targets.js";
|
|
@@ -145,19 +147,20 @@ function stripHtmlToText(html: string): string {
|
|
|
145
147
|
async function decryptEncryptedRows(messages: Message[], unlocked: UnlockedKeys): Promise<Record<string, DecryptedRow>> {
|
|
146
148
|
const encrypted = messages.filter((m) => m.subject === ENCRYPTED_SUBJECT_PLACEHOLDER);
|
|
147
149
|
// Imported once for all the rows, by whichever needs it first.
|
|
148
|
-
let securityModule: Promise<typeof import("
|
|
150
|
+
let securityModule: Promise<typeof import("../../lib/crypto/messageSecurity.js")> | undefined;
|
|
149
151
|
const entries = await Promise.all(
|
|
150
152
|
encrypted.map(async (message): Promise<[string, DecryptedRow] | null> => {
|
|
151
153
|
try {
|
|
152
154
|
const rawMime = await getMessageRawContent(message.uid);
|
|
153
155
|
// Loaded here, on first use: the S/MIME code (PKI.js, ASN.1, X.509) is over half a megabyte and an inbox with
|
|
154
156
|
// no encrypted mail in it never needs it.
|
|
155
|
-
const { evaluateMessageSecurity } = await (securityModule ??= import("
|
|
157
|
+
const { evaluateMessageSecurity } = await (securityModule ??= import("../../lib/crypto/messageSecurity.js"));
|
|
156
158
|
const security = await evaluateMessageSecurity(rawMime, unlocked);
|
|
157
159
|
if (!security.subject && !security.html) {
|
|
158
160
|
return null;
|
|
159
161
|
}
|
|
160
162
|
const preview = security.html ? stripHtmlToText(security.html).slice(0, LIST_PREVIEW_MAX_LENGTH) : undefined;
|
|
163
|
+
rememberDecrypted(message.uid, message.mailboxUid, { subject: security.subject, preview });
|
|
161
164
|
return [message.uid, { subject: security.subject, preview }];
|
|
162
165
|
} catch {
|
|
163
166
|
return null;
|
|
@@ -297,7 +300,7 @@ async function searchTier3Windows(
|
|
|
297
300
|
windows: ParsedSearchQuery[],
|
|
298
301
|
unlocked: UnlockedKeys | undefined,
|
|
299
302
|
mailboxUid: string,
|
|
300
|
-
loadTier3: () => Promise<typeof import("
|
|
303
|
+
loadTier3: () => Promise<typeof import("../../lib/search/searchTier3.js")>,
|
|
301
304
|
): Promise<SearchResult[]> {
|
|
302
305
|
// Loaded on first use, with the S/MIME code it decrypts through (see `decryptEncryptedRows()`) - once for however many mailboxes a search
|
|
303
306
|
// covers: `loadTier3` hands every one of them the same import.
|
|
@@ -382,11 +385,12 @@ function mailboxesWithMore(cursor: SearchCursor): string[] {
|
|
|
382
385
|
async function resolveHitsToMessages(
|
|
383
386
|
hits: SearchResult[],
|
|
384
387
|
cache: Map<string, Message | null>,
|
|
388
|
+
client?: ApiClient,
|
|
385
389
|
): Promise<{ messages: Message[]; snippets: Record<string, string> }> {
|
|
386
390
|
const toFetch = hits.filter((hit) => !cache.has(hit.entityUid));
|
|
387
391
|
await Promise.all(
|
|
388
392
|
toFetch.map(async (hit) => {
|
|
389
|
-
const message = await getMessage(hit.entityUid).catch(() => null);
|
|
393
|
+
const message = await getMessage(hit.entityUid, client).catch(() => null);
|
|
390
394
|
cache.set(hit.entityUid, message);
|
|
391
395
|
}),
|
|
392
396
|
);
|
|
@@ -489,6 +493,7 @@ async function fetchAggregateMessages(
|
|
|
489
493
|
mailboxFolders: MailboxFolders[],
|
|
490
494
|
type: AggregateFolderType,
|
|
491
495
|
filter: MessageListFilter,
|
|
496
|
+
client?: ApiClient,
|
|
492
497
|
): Promise<Message[]> {
|
|
493
498
|
const perMailbox = await Promise.all(
|
|
494
499
|
mailboxFolders.map(async ({ mailbox, folders }) => {
|
|
@@ -500,7 +505,7 @@ async function fetchAggregateMessages(
|
|
|
500
505
|
// this function's own pagination scope trim) - each mailbox contributes its own newest page and
|
|
501
506
|
// they're merged newest-first, which a different sort key couldn't be made honest across an
|
|
502
507
|
// arbitrary number of independently-paged folders.
|
|
503
|
-
const messages = await listMessages(folder.uid, { limit: MESSAGE_PAGE_SIZE, filter }).catch(() => [] as Message[]);
|
|
508
|
+
const messages = await listMessages(folder.uid, { limit: MESSAGE_PAGE_SIZE, filter }, client).catch(() => [] as Message[]);
|
|
504
509
|
return { mailbox, messages };
|
|
505
510
|
}),
|
|
506
511
|
);
|
|
@@ -517,6 +522,7 @@ async function fetchAggregateConversations(
|
|
|
517
522
|
mailboxFolders: MailboxFolders[],
|
|
518
523
|
type: AggregateFolderType,
|
|
519
524
|
params: ConversationListParams,
|
|
525
|
+
client?: ApiClient,
|
|
520
526
|
): Promise<ListedConversation[]> {
|
|
521
527
|
const perMailbox = await Promise.all(
|
|
522
528
|
mailboxFolders.map(async ({ mailbox, folders }): Promise<ListedConversation[]> => {
|
|
@@ -524,7 +530,7 @@ async function fetchAggregateConversations(
|
|
|
524
530
|
if (!folder) {
|
|
525
531
|
return [];
|
|
526
532
|
}
|
|
527
|
-
const rows = await listConversations(mailbox.uid, { ...params, folderUid: folder.uid, page: 0 }).catch(() => [] as ConversationSummary[]);
|
|
533
|
+
const rows = await listConversations(mailbox.uid, { ...params, folderUid: folder.uid, page: 0 }, client).catch(() => [] as ConversationSummary[]);
|
|
528
534
|
return rows.map((row) => ({ ...row, mailboxUid: mailbox.uid }));
|
|
529
535
|
}),
|
|
530
536
|
);
|
|
@@ -570,6 +576,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
570
576
|
const isMobile = useIsMobile();
|
|
571
577
|
const navigate = useNavigate();
|
|
572
578
|
const { requestUnlock } = useUnlockPrompt();
|
|
579
|
+
const client = useApiClient();
|
|
573
580
|
const [messages, setMessages] = useState<Message[]>([]);
|
|
574
581
|
const [conversations, setConversations] = useState<ListedConversation[]>([]);
|
|
575
582
|
const [loading, setLoading] = useState(true);
|
|
@@ -940,7 +947,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
940
947
|
}
|
|
941
948
|
let cancelled = false;
|
|
942
949
|
setOtherMailboxLabels([]);
|
|
943
|
-
listLabels(labelsMailboxUid, { limit: 200 })
|
|
950
|
+
listLabels(labelsMailboxUid, { limit: 200 }, client)
|
|
944
951
|
.then((result) => {
|
|
945
952
|
if (!cancelled) {
|
|
946
953
|
setOtherMailboxLabels(result);
|
|
@@ -950,12 +957,12 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
950
957
|
return () => {
|
|
951
958
|
cancelled = true;
|
|
952
959
|
};
|
|
953
|
-
}, [labelsMailboxUid, otherMailbox]);
|
|
960
|
+
}, [labelsMailboxUid, otherMailbox, client]);
|
|
954
961
|
|
|
955
962
|
useEffect(() => {
|
|
956
963
|
let cancelled = false;
|
|
957
964
|
setMailboxLabels([]);
|
|
958
|
-
listLabels(activeMailboxUid, { limit: 200 })
|
|
965
|
+
listLabels(activeMailboxUid, { limit: 200 }, client)
|
|
959
966
|
.then((result) => {
|
|
960
967
|
if (!cancelled) {
|
|
961
968
|
setMailboxLabels(result);
|
|
@@ -965,7 +972,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
965
972
|
return () => {
|
|
966
973
|
cancelled = true;
|
|
967
974
|
};
|
|
968
|
-
}, [activeMailboxUid]);
|
|
975
|
+
}, [activeMailboxUid, client]);
|
|
969
976
|
|
|
970
977
|
// Debounce the raw input into the query actually searched, so every keystroke doesn't fire a request.
|
|
971
978
|
useEffect(() => {
|
|
@@ -1083,7 +1090,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1083
1090
|
setLoading(true);
|
|
1084
1091
|
setError(null);
|
|
1085
1092
|
setHasMore(false);
|
|
1086
|
-
void fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0))
|
|
1093
|
+
void fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0), client)
|
|
1087
1094
|
.then((results) => {
|
|
1088
1095
|
if (isCurrentRun()) {
|
|
1089
1096
|
setConversations(results);
|
|
@@ -1111,7 +1118,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1111
1118
|
setLoading(true);
|
|
1112
1119
|
}
|
|
1113
1120
|
setError(null);
|
|
1114
|
-
listConversations(activeMailboxUid, conversationParams(0))
|
|
1121
|
+
listConversations(activeMailboxUid, conversationParams(0), client)
|
|
1115
1122
|
.then((result) => {
|
|
1116
1123
|
if (isCurrentRun()) {
|
|
1117
1124
|
shownListKeyRef.current = listKey;
|
|
@@ -1145,7 +1152,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1145
1152
|
setLoading(true);
|
|
1146
1153
|
setError(null);
|
|
1147
1154
|
// hasMore stays false (set above) - see fetchAggregateMessages()'s own pagination scope trim.
|
|
1148
|
-
void fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter)
|
|
1155
|
+
void fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter, client)
|
|
1149
1156
|
.then((results) => {
|
|
1150
1157
|
if (isCurrentRun()) {
|
|
1151
1158
|
setMessages(results);
|
|
@@ -1180,8 +1187,8 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1180
1187
|
const mailboxNames = new Map(searchedMailboxes.map((mb) => [mb.uid, mb.displayName]));
|
|
1181
1188
|
const isSuperseded = () => searchRunIdRef.current !== myRunId;
|
|
1182
1189
|
// Tier 3's code, imported when the first mailbox needs it and shared by the rest.
|
|
1183
|
-
let tier3Module: Promise<typeof import("
|
|
1184
|
-
const loadTier3 = () => (tier3Module ??= import("
|
|
1190
|
+
let tier3Module: Promise<typeof import("../../lib/search/searchTier3.js")> | undefined;
|
|
1191
|
+
const loadTier3 = () => (tier3Module ??= import("../../lib/search/searchTier3.js"));
|
|
1185
1192
|
const failures: MailboxFailure[] = [];
|
|
1186
1193
|
/** The failed mailbox's notice entry. A search of one mailbox has none: its failure fails the search. */
|
|
1187
1194
|
const noteFailure = (uid: string, encrypted: boolean, err: unknown) => {
|
|
@@ -1229,6 +1236,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1229
1236
|
const { messages: resolved, snippets: resolvedSnippets } = await resolveHitsToMessages(
|
|
1230
1237
|
merged,
|
|
1231
1238
|
resolvedMessageCacheRef.current,
|
|
1239
|
+
client,
|
|
1232
1240
|
);
|
|
1233
1241
|
if (isSuperseded() || revealId < revealsApplied) {
|
|
1234
1242
|
return;
|
|
@@ -1259,7 +1267,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1259
1267
|
const run = runs.get(uid)!;
|
|
1260
1268
|
try {
|
|
1261
1269
|
const [tier1Page, tier2Page] = await Promise.all([
|
|
1262
|
-
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, undefined, uid, pageSize)), tier1TimeoutMs),
|
|
1270
|
+
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, undefined, uid, pageSize), client), tier1TimeoutMs),
|
|
1263
1271
|
searchLocalIndex(uid, parsed, run.unlocked, pageSize, 0),
|
|
1264
1272
|
]);
|
|
1265
1273
|
if (isSuperseded()) {
|
|
@@ -1377,7 +1385,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1377
1385
|
shownListKeyRef.current = listKey;
|
|
1378
1386
|
pendingScrollRef.current = snapshot.scrollTop;
|
|
1379
1387
|
}
|
|
1380
|
-
listMessages(folderUid!, listParams)
|
|
1388
|
+
listMessages(folderUid!, listParams, client)
|
|
1381
1389
|
.then((results) => {
|
|
1382
1390
|
if (isCurrentRun()) {
|
|
1383
1391
|
shownListKeyRef.current = listKey;
|
|
@@ -1436,6 +1444,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1436
1444
|
crossMailbox,
|
|
1437
1445
|
searchTargetKey,
|
|
1438
1446
|
activeMailboxUid,
|
|
1447
|
+
client,
|
|
1439
1448
|
]);
|
|
1440
1449
|
|
|
1441
1450
|
// Which folders the messages on screen live in: one the sidebar does not know (the Outbox and Sent Items are made by the server on first use) is looked for -
|
|
@@ -1473,12 +1482,12 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1473
1482
|
try {
|
|
1474
1483
|
if (asConversations && aggregateFolderType) {
|
|
1475
1484
|
// No paging here either: the fresh merged first pages are the list.
|
|
1476
|
-
const fresh = await fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0));
|
|
1485
|
+
const fresh = await fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0), client);
|
|
1477
1486
|
if (isCurrent()) {
|
|
1478
1487
|
setConversations(fresh);
|
|
1479
1488
|
}
|
|
1480
1489
|
} else if (asConversations) {
|
|
1481
|
-
const fresh = await listConversations(activeMailboxUid, conversationParams(0));
|
|
1490
|
+
const fresh = await listConversations(activeMailboxUid, conversationParams(0), client);
|
|
1482
1491
|
if (!isCurrent()) {
|
|
1483
1492
|
return;
|
|
1484
1493
|
}
|
|
@@ -1488,12 +1497,12 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1488
1497
|
setHasMore(!merged.complete);
|
|
1489
1498
|
} else if (aggregateFolderType) {
|
|
1490
1499
|
// No paging here (see `fetchAggregateMessages()`): the fresh merged first pages are the list.
|
|
1491
|
-
const fresh = await fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter);
|
|
1500
|
+
const fresh = await fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter, client);
|
|
1492
1501
|
if (isCurrent()) {
|
|
1493
1502
|
setMessages(fresh);
|
|
1494
1503
|
}
|
|
1495
1504
|
} else {
|
|
1496
|
-
const fresh = await listMessages(folderUid!, listParams);
|
|
1505
|
+
const fresh = await listMessages(folderUid!, listParams, client);
|
|
1497
1506
|
if (!isCurrent()) {
|
|
1498
1507
|
return;
|
|
1499
1508
|
}
|
|
@@ -1567,7 +1576,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1567
1576
|
try {
|
|
1568
1577
|
if (asConversations) {
|
|
1569
1578
|
const page = Math.floor(listedOffsetRef.current / MESSAGE_PAGE_SIZE);
|
|
1570
|
-
const more = await listConversations(activeMailboxUid, conversationParams(page));
|
|
1579
|
+
const more = await listConversations(activeMailboxUid, conversationParams(page), client);
|
|
1571
1580
|
if (!isCurrentRun()) {
|
|
1572
1581
|
return;
|
|
1573
1582
|
}
|
|
@@ -1592,7 +1601,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1592
1601
|
try {
|
|
1593
1602
|
const [tier1Page, tier2Page] = await Promise.all([
|
|
1594
1603
|
withTimeout(
|
|
1595
|
-
searchMailbox(parsed.text, tier1SearchParams(parsed, mailboxCursor.tier1Cursor, uid, cursor.pageSize)),
|
|
1604
|
+
searchMailbox(parsed.text, tier1SearchParams(parsed, mailboxCursor.tier1Cursor, uid, cursor.pageSize), client),
|
|
1596
1605
|
tier1TimeoutMs,
|
|
1597
1606
|
),
|
|
1598
1607
|
searchLocalIndex(uid, parsed, getUnlockedKeys(uid), cursor.pageSize, mailboxCursor.tier2Offset),
|
|
@@ -1644,7 +1653,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1644
1653
|
answered.flatMap((page) => page.tier2),
|
|
1645
1654
|
answered.flatMap((page) => page.tier3),
|
|
1646
1655
|
);
|
|
1647
|
-
const { messages: more, snippets: moreSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current);
|
|
1656
|
+
const { messages: more, snippets: moreSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current, client);
|
|
1648
1657
|
if (!isCurrentRun()) {
|
|
1649
1658
|
return;
|
|
1650
1659
|
}
|
|
@@ -1682,7 +1691,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1682
1691
|
// no longer a page boundary, so this page overlaps rows already shown - `appendUnseenRows()`
|
|
1683
1692
|
// drops those - rather than skipping the message that shifted back across the boundary.
|
|
1684
1693
|
const page = Math.floor(listedOffsetRef.current / MESSAGE_PAGE_SIZE);
|
|
1685
|
-
const more = await listMessages(folderUid!, { ...listParams, page });
|
|
1694
|
+
const more = await listMessages(folderUid!, { ...listParams, page }, client);
|
|
1686
1695
|
if (!isCurrentRun()) {
|
|
1687
1696
|
return;
|
|
1688
1697
|
}
|
|
@@ -1716,6 +1725,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1716
1725
|
activeMailboxUid,
|
|
1717
1726
|
crossMailbox,
|
|
1718
1727
|
searchTargetKey,
|
|
1728
|
+
client,
|
|
1719
1729
|
]);
|
|
1720
1730
|
|
|
1721
1731
|
// Always calls the latest `loadMore` closure so the effect below doesn't need `loadMore` itself in its
|
|
@@ -1884,7 +1894,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1884
1894
|
setResolvingSelection((n) => n + 1);
|
|
1885
1895
|
try {
|
|
1886
1896
|
const loaded = await Promise.all(
|
|
1887
|
-
missing.map(async (id) => [id, await listConversationMessages(activeMailboxUid, id)] as const),
|
|
1897
|
+
missing.map(async (id) => [id, await listConversationMessages(activeMailboxUid, id, {}, client)] as const),
|
|
1888
1898
|
);
|
|
1889
1899
|
setConversationMessagesById((prev) => ({ ...prev, ...Object.fromEntries(loaded) }));
|
|
1890
1900
|
} catch (err) {
|
|
@@ -1989,11 +1999,11 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
1989
1999
|
return inEachMailbox(chosen, async (ofMailbox, group) => {
|
|
1990
2000
|
const archiveFolderUid = foldersOf(ofMailbox).find((f) => f.type === "archive")?.uid;
|
|
1991
2001
|
if (archiveFolderUid) {
|
|
1992
|
-
return moveMessages(group, archiveFolderUid);
|
|
2002
|
+
return moveMessages(group, archiveFolderUid, client);
|
|
1993
2003
|
}
|
|
1994
|
-
const first = await archiveMessage(group[0].uid);
|
|
2004
|
+
const first = await archiveMessage(group[0].uid, client);
|
|
1995
2005
|
const rest = group.slice(1);
|
|
1996
|
-
return rest.length === 0 ? [first] : [first, ...(await moveMessages(rest, first.folderUid))];
|
|
2006
|
+
return rest.length === 0 ? [first] : [first, ...(await moveMessages(rest, first.folderUid, client))];
|
|
1997
2007
|
});
|
|
1998
2008
|
}
|
|
1999
2009
|
|
|
@@ -2025,20 +2035,20 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2025
2035
|
if (known) {
|
|
2026
2036
|
return known;
|
|
2027
2037
|
}
|
|
2028
|
-
const listed = (await listFolders(ofMailbox)).find((f) => f.type === type);
|
|
2038
|
+
const listed = (await listFolders(ofMailbox, client)).find((f) => f.type === type);
|
|
2029
2039
|
if (listed) {
|
|
2030
2040
|
onFolderCreated(listed);
|
|
2031
2041
|
lazyFoldersRef.current.set(key, listed.uid);
|
|
2032
2042
|
return listed.uid;
|
|
2033
2043
|
}
|
|
2034
|
-
const created = await createFolder({ mailboxUid: ofMailbox, name, type });
|
|
2044
|
+
const created = await createFolder({ mailboxUid: ofMailbox, name, type }, client);
|
|
2035
2045
|
lazyFoldersRef.current.set(key, created.uid);
|
|
2036
2046
|
return created.uid;
|
|
2037
2047
|
}
|
|
2038
2048
|
|
|
2039
2049
|
/** Moves `chosen` into each of its mailbox's own folder of `type` (Deleted Items, Junk), making it where the server has none yet. */
|
|
2040
2050
|
function moveToFolderOfType(chosen: Message[], type: Folder["type"], name: string): Promise<Message[]> {
|
|
2041
|
-
return inEachMailbox(chosen, async (ofMailbox, group) => moveMessages(group, await resolveFolderOfType(type, name, ofMailbox)));
|
|
2051
|
+
return inEachMailbox(chosen, async (ofMailbox, group) => moveMessages(group, await resolveFolderOfType(type, name, ofMailbox), client));
|
|
2042
2052
|
}
|
|
2043
2053
|
|
|
2044
2054
|
/**
|
|
@@ -2059,6 +2069,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2059
2069
|
);
|
|
2060
2070
|
return { uid: message.uid, version: message.version, labelUids: [...new Set([...labelUids, ...kept])] };
|
|
2061
2071
|
}),
|
|
2072
|
+
client,
|
|
2062
2073
|
),
|
|
2063
2074
|
false,
|
|
2064
2075
|
);
|
|
@@ -2151,7 +2162,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2151
2162
|
setMoveDialog(null);
|
|
2152
2163
|
return;
|
|
2153
2164
|
}
|
|
2154
|
-
await runBulkAction((moving) => moveMessages(moving, folderUidToMoveTo), true, chosen);
|
|
2165
|
+
await runBulkAction((moving) => moveMessages(moving, folderUidToMoveTo, client), true, chosen);
|
|
2155
2166
|
setMoveDialog(null);
|
|
2156
2167
|
}
|
|
2157
2168
|
|
|
@@ -2412,7 +2423,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2412
2423
|
const cacheKey = ofMailbox === activeMailboxUid ? id : `${ofMailbox}\u0000${id}`;
|
|
2413
2424
|
let all = conversationMessagesById[cacheKey];
|
|
2414
2425
|
if (!all) {
|
|
2415
|
-
all = await listConversationMessages(ofMailbox, id);
|
|
2426
|
+
all = await listConversationMessages(ofMailbox, id, {}, client);
|
|
2416
2427
|
const loaded = all;
|
|
2417
2428
|
setConversationMessagesById((prev) => ({ ...prev, [cacheKey]: loaded }));
|
|
2418
2429
|
}
|
|
@@ -2488,11 +2499,20 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2488
2499
|
);
|
|
2489
2500
|
}
|
|
2490
2501
|
|
|
2502
|
+
/** Shift+Delete, from the keyboard: permanently deletes the targets wherever they are, after the same confirmation as Delete in Deleted Items. */
|
|
2503
|
+
async function permanentDeleteFromKeyboard() {
|
|
2504
|
+
const targets = await keyboardTargets();
|
|
2505
|
+
if (targets.length > 0 && (await purgeChosen(targets)) && threadPane && !selectMode) {
|
|
2506
|
+
closeOpenThread();
|
|
2507
|
+
}
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2491
2510
|
useShortcut(SHORTCUTS.mail.next, () => selectNeighbour(1), { enabled: canMoveSelection });
|
|
2492
2511
|
useShortcut(SHORTCUTS.mail.previous, () => selectNeighbour(-1), { enabled: canMoveSelection });
|
|
2493
2512
|
useShortcut(SHORTCUTS.mail.nextUnread, () => selectNextUnread(1), { enabled: canMoveSelection });
|
|
2494
2513
|
useShortcut(SHORTCUTS.mail.previousUnread, () => selectNextUnread(-1), { enabled: canMoveSelection });
|
|
2495
2514
|
useShortcut(SHORTCUTS.mail.delete, () => void deleteFromKeyboard(), { enabled: keyboardActions && keyboardTargetExists });
|
|
2515
|
+
useShortcut(SHORTCUTS.mail.permanentDelete, () => void permanentDeleteFromKeyboard(), { enabled: keyboardActions && keyboardTargetExists });
|
|
2496
2516
|
useShortcut(
|
|
2497
2517
|
SHORTCUTS.mail.markRead,
|
|
2498
2518
|
() =>
|
|
@@ -2517,7 +2537,7 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2517
2537
|
SHORTCUTS.mail.flag,
|
|
2518
2538
|
() =>
|
|
2519
2539
|
// Flags them all unless every one already is - what the bar's Flag and Unflag would do on this selection.
|
|
2520
|
-
void runOnKeyboardTargets((chosen) => setMessagesFlagged(chosen, !chosen.every((m) => m.flags.flagged)), false),
|
|
2540
|
+
void runOnKeyboardTargets((chosen) => setMessagesFlagged(chosen, !chosen.every((m) => m.flags.flagged), client), false),
|
|
2521
2541
|
{ enabled: keyboardActions && keyboardTargetExists },
|
|
2522
2542
|
);
|
|
2523
2543
|
useShortcut(
|
|
@@ -2630,11 +2650,11 @@ function InboxContent({ userUid }: { userUid?: string }) {
|
|
|
2630
2650
|
false,
|
|
2631
2651
|
)
|
|
2632
2652
|
}
|
|
2633
|
-
onSetFlagged={(flagged) => void runBulkAction((chosen) => setMessagesFlagged(chosen, flagged), false)}
|
|
2653
|
+
onSetFlagged={(flagged) => void runBulkAction((chosen) => setMessagesFlagged(chosen, flagged, client), false)}
|
|
2634
2654
|
shortcuts={keyboardActions}
|
|
2635
2655
|
onArchive={() => void runBulkAction(bulkArchive, true)}
|
|
2636
2656
|
onMoveTo={async (targetFolderUid) => {
|
|
2637
|
-
await runBulkAction((chosen) => moveMessages(chosen, targetFolderUid), true);
|
|
2657
|
+
await runBulkAction((chosen) => moveMessages(chosen, targetFolderUid, client), true);
|
|
2638
2658
|
}}
|
|
2639
2659
|
onReportJunk={() => void moveSelectionToType("junk", "Junk Email")}
|
|
2640
2660
|
onDelete={() =>
|
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { pageTitle } from "../../shared/navigation/pageTitle.js";
|
|
6
6
|
import React, { useEffect, useState } from "react";
|
|
7
|
-
import { ApiRequestError } from "
|
|
8
|
-
import { Message, getMessage } from "
|
|
9
|
-
import { Label, listLabels } from "
|
|
10
|
-
import { useMessageAttachments } from "
|
|
7
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
8
|
+
import { Message, getMessage } from "../../../lib/mail/mailApi.js";
|
|
9
|
+
import { Label, listLabels } from "../../../lib/mail/labelsApi.js";
|
|
10
|
+
import { useMessageAttachments } from "../../../lib/mail/mailDetailHooks.js";
|
|
11
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
11
12
|
import { useMarkMessageRead } from "../../shared/mail/useMarkMessageRead.js";
|
|
12
13
|
import MailShell, { MailShellProps, useMailShell } from "../../shared/components/mail/layout/MailShell.js";
|
|
13
14
|
import { LazyConversationThreadPane, LazyMessageDetailPane } from "../../shared/components/mail/LazyReadingPane.js";
|
|
14
15
|
import { useSearchParams } from "@rapidrest/react/client";
|
|
15
16
|
import { ReadingPaneSkeleton } from "../../shared/components/mail/reading/MessageCard.js";
|
|
16
|
-
import Alert from "
|
|
17
|
+
import Alert from "../../../lib/components/feedback/Alert.js";
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Only reached on mobile (below the `md` breakpoint) — desktop's `apps/www/index.tsx` keeps its existing
|
|
@@ -31,6 +32,7 @@ function MessageDetailPage(props: MailShellProps & { params: { uid: string } })
|
|
|
31
32
|
|
|
32
33
|
function MessageDetailContent({ uid }: { uid: string }) {
|
|
33
34
|
const { mailboxFolders, mailboxUid, onFolderCreated } = useMailShell();
|
|
35
|
+
const client = useApiClient();
|
|
34
36
|
const [message, setMessage] = useState<Message | null>(null);
|
|
35
37
|
const [loading, setLoading] = useState(true);
|
|
36
38
|
const [error, setError] = useState<string | null>(null);
|
|
@@ -40,11 +42,11 @@ function MessageDetailContent({ uid }: { uid: string }) {
|
|
|
40
42
|
useEffect(() => {
|
|
41
43
|
setLoading(true);
|
|
42
44
|
setError(null);
|
|
43
|
-
getMessage(uid)
|
|
45
|
+
getMessage(uid, client)
|
|
44
46
|
.then(setMessage)
|
|
45
47
|
.catch((err) => setError(err instanceof ApiRequestError ? err.message : "Could not load this message."))
|
|
46
48
|
.finally(() => setLoading(false));
|
|
47
|
-
}, [uid]);
|
|
49
|
+
}, [uid, client]);
|
|
48
50
|
|
|
49
51
|
// See `apps/www/index.tsx`'s identical effect's own doc comment - a failure here just hides the
|
|
50
52
|
// Labels control rather than blocking the rest of the page. Keyed on the message's own mailbox, not the
|
|
@@ -55,7 +57,7 @@ function MessageDetailContent({ uid }: { uid: string }) {
|
|
|
55
57
|
return;
|
|
56
58
|
}
|
|
57
59
|
let cancelled = false;
|
|
58
|
-
listLabels(messageMailboxUid, { limit: 200 })
|
|
60
|
+
listLabels(messageMailboxUid, { limit: 200 }, client)
|
|
59
61
|
.then((result) => {
|
|
60
62
|
if (!cancelled) {
|
|
61
63
|
setLabels(result);
|
|
@@ -65,7 +67,7 @@ function MessageDetailContent({ uid }: { uid: string }) {
|
|
|
65
67
|
return () => {
|
|
66
68
|
cancelled = true;
|
|
67
69
|
};
|
|
68
|
-
}, [messageMailboxUid]);
|
|
70
|
+
}, [messageMailboxUid, client]);
|
|
69
71
|
|
|
70
72
|
// A thread loads, marks read and fetches the attachments of each message it opens itself.
|
|
71
73
|
const attachments = useMessageAttachments(conversationId ? null : message);
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
6
6
|
import React, { FormEvent, useState } from "react";
|
|
7
|
-
import { toDatetimeLocal } from "
|
|
8
|
-
import { updateMailbox } from "
|
|
7
|
+
import { toDatetimeLocal } from "../../../../lib/util/dateInput.js";
|
|
8
|
+
import { updateMailbox } from "../../../../lib/mail/mailApi.js";
|
|
9
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
9
10
|
import SettingsShell, { SettingsShellProps, useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
10
|
-
import Button from "
|
|
11
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
11
12
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
12
13
|
|
|
13
14
|
const INPUT_CLASS =
|
|
@@ -29,6 +30,7 @@ function AutoReplyContent() {
|
|
|
29
30
|
// resolved to one of them (a mailbox-less caller sees `MailboxProvisioning` instead) — this lookup
|
|
30
31
|
// can't miss, same established non-null pattern as `apps/www/contacts/index.tsx`'s `mailboxUid!`.
|
|
31
32
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid)!;
|
|
33
|
+
const client = useApiClient();
|
|
32
34
|
|
|
33
35
|
const [oofEnabled, setOofEnabled] = useState(mailbox.oofEnabled ?? false);
|
|
34
36
|
const [oofMessage, setOofMessage] = useState(mailbox.oofMessage ?? "");
|
|
@@ -53,7 +55,7 @@ function AutoReplyContent() {
|
|
|
53
55
|
// `null` (not omitted) clears a previously saved window - an omitted field is left as-is.
|
|
54
56
|
oofStartTime: oofStartTime ? new Date(oofStartTime).toISOString() : null,
|
|
55
57
|
oofEndTime: oofEndTime ? new Date(oofEndTime).toISOString() : null,
|
|
56
|
-
});
|
|
58
|
+
}, client);
|
|
57
59
|
setVersion(updated.version);
|
|
58
60
|
setSaved(true);
|
|
59
61
|
} catch (err) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
6
6
|
import React, { FormEvent, useId, useRef, useState } from "react";
|
|
7
|
-
import { blockedSendersOf, isSharedWithMe, safeSendersOf } from "
|
|
7
|
+
import { blockedSendersOf, isSharedWithMe, safeSendersOf } from "../../../../lib/mail/mailApi.js";
|
|
8
8
|
import {
|
|
9
9
|
MAX_SENDER_LIST_ENTRIES,
|
|
10
10
|
SenderListKind,
|
|
@@ -14,9 +14,10 @@ import {
|
|
|
14
14
|
checkSenderEntry,
|
|
15
15
|
removeBlockedSender,
|
|
16
16
|
removeSafeSender,
|
|
17
|
-
} from "
|
|
17
|
+
} from "../../../../lib/mail/senderListsApi.js";
|
|
18
18
|
import SettingsShell, { SettingsShellProps, useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
19
|
-
import Button from "
|
|
19
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
20
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
20
21
|
import { useMailboxUpdateAccess } from "../../../shared/mail/useMailboxUpdateAccess.js";
|
|
21
22
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
22
23
|
|
|
@@ -222,6 +223,7 @@ function ListsContent() {
|
|
|
222
223
|
// `SettingsShell` only ever renders its children once `mailboxes` has loaded and `mailboxUid` has resolved to one of them - same established
|
|
223
224
|
// non-null pattern as `apps/www/settings/read-receipts/index.tsx`.
|
|
224
225
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid)!;
|
|
226
|
+
const client = useApiClient();
|
|
225
227
|
const writable = useMailboxUpdateAccess(mailbox);
|
|
226
228
|
// The lists are the owner's (and a manager's) to change; the server does not say which of the two a delegate is, so one who may update is offered the
|
|
227
229
|
// forms and told what a refusal means.
|
|
@@ -277,8 +279,8 @@ function ListsContent() {
|
|
|
277
279
|
otherEntries={safe}
|
|
278
280
|
ownAddresses={ownAddresses}
|
|
279
281
|
editable={writable}
|
|
280
|
-
onAdd={(entry) => change(() => addBlockedSender(mailbox.uid, entry), "Couldn't block this sender")}
|
|
281
|
-
onRemove={(entry) => change(() => removeBlockedSender(mailbox.uid, entry), "Couldn't unblock this sender")}
|
|
282
|
+
onAdd={(entry) => change(() => addBlockedSender(mailbox.uid, entry, client), "Couldn't block this sender")}
|
|
283
|
+
onRemove={(entry) => change(() => removeBlockedSender(mailbox.uid, entry, client), "Couldn't unblock this sender")}
|
|
282
284
|
/>
|
|
283
285
|
<ListSection
|
|
284
286
|
kind="safe"
|
|
@@ -286,8 +288,8 @@ function ListsContent() {
|
|
|
286
288
|
otherEntries={blocked}
|
|
287
289
|
ownAddresses={ownAddresses}
|
|
288
290
|
editable={writable}
|
|
289
|
-
onAdd={(entry) => change(() => addSafeSender(mailbox.uid, entry), "Couldn't add this safe sender")}
|
|
290
|
-
onRemove={(entry) => change(() => removeSafeSender(mailbox.uid, entry), "Couldn't remove this safe sender")}
|
|
291
|
+
onAdd={(entry) => change(() => addSafeSender(mailbox.uid, entry, client), "Couldn't add this safe sender")}
|
|
292
|
+
onRemove={(entry) => change(() => removeSafeSender(mailbox.uid, entry, client), "Couldn't remove this safe sender")}
|
|
291
293
|
/>
|
|
292
294
|
</div>
|
|
293
295
|
</>
|