@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
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
HiOutlineNoSymbol,
|
|
17
17
|
HiOutlineSun,
|
|
18
18
|
} from "react-icons/hi2";
|
|
19
|
-
import { ApiRequestError } from "
|
|
19
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
20
20
|
import {
|
|
21
21
|
Attachment,
|
|
22
22
|
Folder,
|
|
@@ -34,8 +34,8 @@ import {
|
|
|
34
34
|
moveMessage,
|
|
35
35
|
recallMessage,
|
|
36
36
|
setMessageLabels,
|
|
37
|
-
} from "
|
|
38
|
-
import { Label } from "
|
|
37
|
+
} from "../../../../lib/mail/mailApi.js";
|
|
38
|
+
import { Label } from "../../../../lib/mail/labelsApi.js";
|
|
39
39
|
import {
|
|
40
40
|
buildForwardQuote,
|
|
41
41
|
buildReplyQuote,
|
|
@@ -43,25 +43,26 @@ import {
|
|
|
43
43
|
buildReplyThreading,
|
|
44
44
|
forwardSubject,
|
|
45
45
|
replySubject,
|
|
46
|
-
} from "
|
|
46
|
+
} from "../../../../lib/mail/compose/composeQuoting.js";
|
|
47
47
|
import MoveToFolderDialog from "./MoveToFolderDialog.js";
|
|
48
48
|
import InviteCard from "./InviteCard.js";
|
|
49
49
|
import { isCalendarAttachment } from "./invite/inviteFormat.js";
|
|
50
50
|
import { useMessageInvite } from "./invite/inviteStore.js";
|
|
51
|
-
import { getUnlockedKeys, subscribeKeySession } from "
|
|
52
|
-
import type { MessageSecurityResult, SignatureFailureReason } from "
|
|
53
|
-
import { extractAddresses, type MimeAttachment } from "
|
|
54
|
-
import { SignerKeyConflictError, signingKeyFingerprints, trustSigner } from "
|
|
55
|
-
import { isLikelyMailingList } from "
|
|
51
|
+
import { getUnlockedKeys, subscribeKeySession } from "../../../../lib/crypto/keySession.js";
|
|
52
|
+
import type { MessageSecurityResult, SignatureFailureReason } from "../../../../lib/crypto/messageSecurity.js";
|
|
53
|
+
import { extractAddresses, type MimeAttachment } from "../../../../lib/crypto/mime.js";
|
|
54
|
+
import { SignerKeyConflictError, signingKeyFingerprints, trustSigner } from "../../../../lib/crypto/keyvaultApi.js";
|
|
55
|
+
import { isLikelyMailingList } from "../../../../lib/crypto/composeSecurity.js";
|
|
56
56
|
import { SenderKeyState, clearPinnedSignerCache, getPinnedSignerFingerprints, getSignerKeyState } from "./pinnedSigners.js";
|
|
57
57
|
import { currentVerificationSeal, getVaultGeneration, sendVerificationSeal } from "./verificationSeals.js";
|
|
58
|
-
import { getMyMailboxAccess } from "
|
|
58
|
+
import { getMyMailboxAccess } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
59
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
59
60
|
import KeyChangeReview from "../contacts/KeyChangeReview.js";
|
|
60
61
|
import { KEY_CHANGE_STALE_MESSAGE, sameFingerprint } from "../contacts/contactKeys.js";
|
|
61
62
|
import { ComposeLateInput, prefetchComposeWindow, useCompose } from "./compose/ComposeContext.js";
|
|
62
63
|
import { loadOriginalMessage, prefetchOriginalMessage } from "./compose/quotedBody.js";
|
|
63
64
|
import { formatRecipient } from "./compose/recipients.js";
|
|
64
|
-
import { formatMailAddress } from "
|
|
65
|
+
import { formatMailAddress } from "../../../../lib/mail/mailAddress.js";
|
|
65
66
|
import MailAddress, { RecipientLine } from "./MailAddress.js";
|
|
66
67
|
import { useMailShell } from "./layout/MailShell.js";
|
|
67
68
|
import { ariaKeyShortcuts, withHint } from "../../keyboard/format.js";
|
|
@@ -74,19 +75,21 @@ import { useNavigate } from "../../navigation/index.js";
|
|
|
74
75
|
import { notify } from "../../notifications/store.js";
|
|
75
76
|
import { notifyApiError } from "../../notifications/apiErrors.js";
|
|
76
77
|
import { useMailboxUpdateAccess } from "../../mail/useMailboxUpdateAccess.js";
|
|
77
|
-
import Modal from "
|
|
78
|
-
import Alert from "
|
|
78
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
79
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
79
80
|
import LabelMenuButton from "./labelMenu.js";
|
|
80
|
-
import Button from "
|
|
81
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
81
82
|
import EncryptedBody from "./reading/EncryptedBody.js";
|
|
82
|
-
import { displaySubject } from "./reading/EncryptedPreview.js";
|
|
83
|
+
import { ENCRYPTED_SUBJECT_PLACEHOLDER, displaySubject } from "./reading/EncryptedPreview.js";
|
|
84
|
+
import { rememberDecrypted } from "../../mail/decryptedMessages.js";
|
|
83
85
|
import MessageBody, { BodySkeleton } from "./reading/MessageBody.js";
|
|
84
86
|
import { BODY_FONT_STYLE, CardShell, SenderAvatar, SubjectCard } from "./reading/MessageCard.js";
|
|
85
87
|
import MessageMoreMenu, { MessageMenuActions } from "./reading/MessageMoreMenu.js";
|
|
86
88
|
import MessageSourceDialog, { SourceMode, SourceState } from "./reading/MessageSourceDialog.js";
|
|
87
89
|
import { useMessageActions } from "./reading/useMessageActions.js";
|
|
88
90
|
import { saveAsEml } from "./reading/messageExport.js";
|
|
89
|
-
import {
|
|
91
|
+
import { buildConversationPrintDocument, printDocument, type PrintableMessage } from "./reading/printMessage.js";
|
|
92
|
+
import { olderConversationMessages, printHeaders, printableOlderMessage } from "./reading/conversationPrint.js";
|
|
90
93
|
import { type BodyContent, fetchBodyContent } from "./reading/bodyContent.js";
|
|
91
94
|
import { useViewOriginal } from "./reading/viewOriginal.js";
|
|
92
95
|
import { ROW_FOCUS_CLASS, UnreadLabel, dateClass, senderClass } from "./unreadStyle.js";
|
|
@@ -508,6 +511,7 @@ function MessageDetailContent({
|
|
|
508
511
|
const [nowMs, setNowMs] = useState(() => Date.now());
|
|
509
512
|
const { mailboxes, trackMessageChange } = useMailShell();
|
|
510
513
|
const { requestUnlock } = useUnlockPrompt();
|
|
514
|
+
const client = useApiClient();
|
|
511
515
|
// Bumped after a successful on-demand unlock to re-run the effect below - it's not a dependency the
|
|
512
516
|
// effect could read reactively otherwise (getUnlockedKeys() is a plain module-level read, not React
|
|
513
517
|
// state; see keySession.ts's own doc comment).
|
|
@@ -556,7 +560,7 @@ function MessageDetailContent({
|
|
|
556
560
|
// mailbox's own signing keys when it sent the message itself. A failed lookup means no pins, which can only
|
|
557
561
|
// ever make a signature "signer not verified", never verified.
|
|
558
562
|
const senderAddress = message.from.address;
|
|
559
|
-
const pinsPromise = getPinnedSignerFingerprints(message.mailboxUid, senderAddress).then(
|
|
563
|
+
const pinsPromise = getPinnedSignerFingerprints(message.mailboxUid, senderAddress, client).then(
|
|
560
564
|
(fingerprints) => ({ loaded: true, fingerprints }),
|
|
561
565
|
() => ({ loaded: false, fingerprints: [] as string[] }),
|
|
562
566
|
);
|
|
@@ -564,9 +568,9 @@ function MessageDetailContent({
|
|
|
564
568
|
// generation; without either the message is evaluated exactly as before, with no seal. The sender's key records
|
|
565
569
|
// are loaded alongside, so a seal can say when the signer key was later revoked as compromised.
|
|
566
570
|
let keyStatePromise: Promise<SenderKeyState | undefined> | undefined;
|
|
567
|
-
const loadKeyState = () => (keyStatePromise ??= getSignerKeyState(message.mailboxUid, senderAddress).catch(() => undefined));
|
|
571
|
+
const loadKeyState = () => (keyStatePromise ??= getSignerKeyState(message.mailboxUid, senderAddress, client).catch(() => undefined));
|
|
568
572
|
const sealContextPromise = getUnlockedKeys(message.mailboxUid)
|
|
569
|
-
? getVaultGeneration(message.mailboxUid).then(async (generation) =>
|
|
573
|
+
? getVaultGeneration(message.mailboxUid, client).then(async (generation) =>
|
|
570
574
|
generation === undefined ? undefined : { generation, keyState: await loadKeyState() },
|
|
571
575
|
)
|
|
572
576
|
: undefined;
|
|
@@ -577,7 +581,7 @@ function MessageDetailContent({
|
|
|
577
581
|
}
|
|
578
582
|
// The S/MIME code (PKI.js and the ASN.1/X.509 libraries) loads here, only for a message that is signed or
|
|
579
583
|
// encrypted - it is over half a megabyte, and the pane opens plain messages without it.
|
|
580
|
-
const messageSecurity = await import("
|
|
584
|
+
const messageSecurity = await import("../../../../lib/crypto/messageSecurity.js");
|
|
581
585
|
const [primaryAddress, ...aliasAddresses] = readerAddressesKey ? readerAddressesKey.split(" ") : [];
|
|
582
586
|
const ownAddresses = readerAddressesKey.toLowerCase().split(" ");
|
|
583
587
|
const ownKeys = ownAddresses.includes(senderAddress.toLowerCase()) ? (readerMailbox!.keys ?? []) : [];
|
|
@@ -607,7 +611,7 @@ function MessageDetailContent({
|
|
|
607
611
|
);
|
|
608
612
|
if (result.sealToWrite) {
|
|
609
613
|
// Best effort and in the background: never awaited, never shown.
|
|
610
|
-
void sendVerificationSeal(message.uid, result.sealToWrite);
|
|
614
|
+
void sendVerificationSeal(message.uid, result.sealToWrite, client);
|
|
611
615
|
}
|
|
612
616
|
} else {
|
|
613
617
|
result = await messageSecurity.evaluateMessageSecurity(rawMime, unlocked, pinned, primaryAddress);
|
|
@@ -625,7 +629,7 @@ function MessageDetailContent({
|
|
|
625
629
|
const keyChanged = signerKeyChanged(result);
|
|
626
630
|
const [keyState, access] = await Promise.all([
|
|
627
631
|
keyChanged || (unpinned && UNVERIFIED_SIGNER_STATES.has(result.state)) ? loadKeyState() : undefined,
|
|
628
|
-
keyChanged ? getMyMailboxAccess(message.mailboxUid).then((a) => a.canUpdate, () => undefined) : undefined,
|
|
632
|
+
keyChanged ? getMyMailboxAccess(message.mailboxUid, client).then((a) => a.canUpdate, () => undefined) : undefined,
|
|
629
633
|
]);
|
|
630
634
|
if (!cancelled) {
|
|
631
635
|
setSecurity(result);
|
|
@@ -644,7 +648,7 @@ function MessageDetailContent({
|
|
|
644
648
|
return () => {
|
|
645
649
|
cancelled = true;
|
|
646
650
|
};
|
|
647
|
-
}, [message.uid, message.mailboxUid, message.from.address, message.encrypted, rawEvaluationNeeded, unlockRefresh, readerAddressesKey]);
|
|
651
|
+
}, [message.uid, message.mailboxUid, message.from.address, message.encrypted, rawEvaluationNeeded, unlockRefresh, readerAddressesKey, client]);
|
|
648
652
|
|
|
649
653
|
// Whether the body is the locked state right now (an encrypted message this device holds no unlocked keys for), for the subscription below.
|
|
650
654
|
const lockedRef = useRef(false);
|
|
@@ -697,7 +701,7 @@ function MessageDetailContent({
|
|
|
697
701
|
|
|
698
702
|
async function reloadMessage() {
|
|
699
703
|
try {
|
|
700
|
-
setReloaded(await getMessage(message.uid));
|
|
704
|
+
setReloaded(await getMessage(message.uid, client));
|
|
701
705
|
setNowMs(Date.now());
|
|
702
706
|
} catch {
|
|
703
707
|
// Keep showing what we have - the next refused action or lease expiry tries again.
|
|
@@ -731,7 +735,7 @@ function MessageDetailContent({
|
|
|
731
735
|
setTrusting(true);
|
|
732
736
|
setTrustError(null);
|
|
733
737
|
try {
|
|
734
|
-
await trustSigner(message.mailboxUid, { address, certificate });
|
|
738
|
+
await trustSigner(message.mailboxUid, { address, certificate }, client);
|
|
735
739
|
clearPinnedSignerCache();
|
|
736
740
|
setTrustConfirmOpen(false);
|
|
737
741
|
setUnlockRefresh((n) => n + 1);
|
|
@@ -758,7 +762,7 @@ function MessageDetailContent({
|
|
|
758
762
|
/** The replying mailbox's own addresses (primary and aliases), which a reply never goes to - from the mail shell's
|
|
759
763
|
* mailbox list, else fetched; none when neither is available. */
|
|
760
764
|
async function ownAddresses(): Promise<string[]> {
|
|
761
|
-
const mailbox = readerMailbox ?? (await getMailbox(message.mailboxUid).catch(() => undefined));
|
|
765
|
+
const mailbox = readerMailbox ?? (await getMailbox(message.mailboxUid, {}, client).catch(() => undefined));
|
|
762
766
|
return mailbox ? [mailbox.primarySmtpAddress, ...(mailbox.aliasAddresses ?? [])] : [];
|
|
763
767
|
}
|
|
764
768
|
|
|
@@ -845,7 +849,7 @@ function MessageDetailContent({
|
|
|
845
849
|
setRecalling(true);
|
|
846
850
|
setError(null);
|
|
847
851
|
try {
|
|
848
|
-
const updated = await recallMessage(message.uid);
|
|
852
|
+
const updated = await recallMessage(message.uid, client);
|
|
849
853
|
setConfirming(false);
|
|
850
854
|
onRecalled?.(updated);
|
|
851
855
|
} catch (err) {
|
|
@@ -863,7 +867,7 @@ function MessageDetailContent({
|
|
|
863
867
|
setCanceling(true);
|
|
864
868
|
setCancelError(null);
|
|
865
869
|
try {
|
|
866
|
-
const updated = await cancelScheduledSend(message, draftsFolderUid
|
|
870
|
+
const updated = await cancelScheduledSend(message, draftsFolderUid!, client);
|
|
867
871
|
// Keeps a `folder:`-scoped Tier 2 local search from still finding it in its old folder.
|
|
868
872
|
void moveLocalEntity(updated.mailboxUid, updated.uid, updated.folderUid);
|
|
869
873
|
// Out of Outbox, into Drafts: both folders' badges.
|
|
@@ -889,7 +893,7 @@ function MessageDetailContent({
|
|
|
889
893
|
setArchiving(true);
|
|
890
894
|
setArchiveError(null);
|
|
891
895
|
try {
|
|
892
|
-
const updated = await archiveMessage(message.uid);
|
|
896
|
+
const updated = await archiveMessage(message.uid, client);
|
|
893
897
|
void moveLocalEntity(updated.mailboxUid, updated.uid, updated.folderUid);
|
|
894
898
|
trackMessageChange(message, updated).settle();
|
|
895
899
|
onArchived?.(updated);
|
|
@@ -912,7 +916,7 @@ function MessageDetailContent({
|
|
|
912
916
|
setLabelsError(null);
|
|
913
917
|
try {
|
|
914
918
|
const base = message.version >= latestLabelsMessageRef.current.version ? message : latestLabelsMessageRef.current;
|
|
915
|
-
const updated = await setMessageLabels(base, labelUids);
|
|
919
|
+
const updated = await setMessageLabels(base, labelUids, client);
|
|
916
920
|
latestLabelsMessageRef.current = updated;
|
|
917
921
|
setLabelsMessage(updated);
|
|
918
922
|
onLabelsChanged?.(updated);
|
|
@@ -933,7 +937,7 @@ function MessageDetailContent({
|
|
|
933
937
|
* passes no `onMoved` would have had nothing moved while the prompt closed as if it had.
|
|
934
938
|
*/
|
|
935
939
|
async function handleMove(folderUid: string) {
|
|
936
|
-
const updated = await moveMessage(message, folderUid);
|
|
940
|
+
const updated = await moveMessage(message, folderUid, client);
|
|
937
941
|
// Move to, Delete and Report junk are all this: the source folder's badge goes down, the target's up.
|
|
938
942
|
trackMessageChange(message, updated).settle();
|
|
939
943
|
onMoved?.(updated);
|
|
@@ -988,7 +992,7 @@ function MessageDetailContent({
|
|
|
988
992
|
setReceiptBusy(type);
|
|
989
993
|
setReceiptError(null);
|
|
990
994
|
try {
|
|
991
|
-
const updated = await (action === "approve" ? approveReceipt : declineReceipt)(message.uid, type);
|
|
995
|
+
const updated = await (action === "approve" ? approveReceipt : declineReceipt)(message.uid, type, client);
|
|
992
996
|
onReceiptHandled?.(updated);
|
|
993
997
|
} catch (err) {
|
|
994
998
|
setReceiptError(err instanceof ApiRequestError ? err.message : "Could not handle this receipt request.");
|
|
@@ -1040,7 +1044,14 @@ function MessageDetailContent({
|
|
|
1040
1044
|
? senderKeyState!.conflict
|
|
1041
1045
|
: undefined;
|
|
1042
1046
|
|
|
1043
|
-
|
|
1047
|
+
// An encrypted message's outer Subject is only RFC 9788's placeholder: whatever decrypting recovered is the subject, signed or not.
|
|
1048
|
+
const decryptedSubject = message.subject === ENCRYPTED_SUBJECT_PLACEHOLDER ? security?.subject : undefined;
|
|
1049
|
+
const shownSubject = (protectedSubject ?? decryptedSubject ?? displaySubject(message.subject)) || "(no subject)";
|
|
1050
|
+
useEffect(() => {
|
|
1051
|
+
if (decryptedSubject) {
|
|
1052
|
+
rememberDecrypted(message.uid, message.mailboxUid, { subject: decryptedSubject });
|
|
1053
|
+
}
|
|
1054
|
+
}, [decryptedSubject, message.uid, message.mailboxUid]);
|
|
1044
1055
|
// What the body area shows. Text or HTML the client recovered from a signed or encrypted message is shown as it is (its own sanitizing
|
|
1045
1056
|
// happens in `MessageBody`, like every body's); anything else is the server's own `/content`. An encrypted message has nothing worth
|
|
1046
1057
|
// fetching until it has been decrypted (the server only has the ciphertext), so it shows the skeleton meanwhile.
|
|
@@ -1102,24 +1113,34 @@ function MessageDetailContent({
|
|
|
1102
1113
|
|
|
1103
1114
|
// ---- The "More actions" menu's own rows (Print, View, Save as, Create rule); the rest are `messageActions`. ----
|
|
1104
1115
|
|
|
1105
|
-
/** Prints this
|
|
1106
|
-
*
|
|
1116
|
+
/** Prints this message and the conversation it belongs to: the message first, then every earlier one, newest to oldest (the messages that
|
|
1117
|
+
* came after it are left out). Each is the body the reading pane shows - what was decrypted or verified here for this one, else the server's
|
|
1118
|
+
* sanitized body - in a frame of its own; see `printMessage.ts`. */
|
|
1107
1119
|
async function handlePrint() {
|
|
1108
1120
|
try {
|
|
1109
1121
|
const content = bodyContent ?? (await fetchBodyContent(message.uid, message.version));
|
|
1110
|
-
const
|
|
1111
|
-
const
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1122
|
+
const older = await olderConversationMessages(message, client).catch(() => []);
|
|
1123
|
+
const earlier = await Promise.all(
|
|
1124
|
+
older.map((other) =>
|
|
1125
|
+
printableOlderMessage(other).catch(
|
|
1126
|
+
(): PrintableMessage => ({
|
|
1127
|
+
subject: other.subject || "(no subject)",
|
|
1128
|
+
headers: printHeaders(other, formatMailAddress(other.from)),
|
|
1129
|
+
content: { kind: "text", text: "This message could not be loaded, so it is not printed." },
|
|
1130
|
+
}),
|
|
1131
|
+
),
|
|
1132
|
+
),
|
|
1133
|
+
);
|
|
1134
|
+
const printable = buildConversationPrintDocument(shownSubject, [
|
|
1135
|
+
{
|
|
1136
|
+
subject: shownSubject,
|
|
1137
|
+
headers: printHeaders(message, senderLabel),
|
|
1138
|
+
content,
|
|
1139
|
+
attachments,
|
|
1140
|
+
inlineParts: innerAttachments,
|
|
1141
|
+
},
|
|
1142
|
+
...earlier,
|
|
1143
|
+
]);
|
|
1123
1144
|
if (printable === undefined) {
|
|
1124
1145
|
notify({ kind: "warning", title: "This message is too large to print here" });
|
|
1125
1146
|
return;
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { FormEvent, useEffect, useRef, useState } from "react";
|
|
6
6
|
import { HiOutlineFolder, HiOutlineFolderPlus } from "react-icons/hi2";
|
|
7
|
-
import { ApiRequestError } from "
|
|
8
|
-
import { Folder, createFolder } from "
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
7
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
8
|
+
import { Folder, createFolder } from "../../../../lib/mail/mailApi.js";
|
|
9
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
10
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
11
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
12
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* The folder types a message can be moved *into* - Outbox is a transient send queue the server owns, and
|
|
@@ -95,6 +96,7 @@ export default function MoveToFolderDialog({
|
|
|
95
96
|
onMove,
|
|
96
97
|
onFolderCreated,
|
|
97
98
|
}: MoveToFolderDialogProps) {
|
|
99
|
+
const client = useApiClient();
|
|
98
100
|
const [filter, setFilter] = useState("");
|
|
99
101
|
const [creating, setCreating] = useState(false);
|
|
100
102
|
const [newName, setNewName] = useState("");
|
|
@@ -152,7 +154,7 @@ export default function MoveToFolderDialog({
|
|
|
152
154
|
setError(null);
|
|
153
155
|
let created: Folder;
|
|
154
156
|
try {
|
|
155
|
-
created = await createFolder({ mailboxUid, name: newName.trim(), type: "user" });
|
|
157
|
+
created = await createFolder({ mailboxUid, name: newName.trim(), type: "user" }, client);
|
|
156
158
|
} catch (err) {
|
|
157
159
|
setError(err instanceof ApiRequestError ? err.message : "Could not create that folder.");
|
|
158
160
|
setBusy(false);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import type { Message } from "
|
|
6
|
+
import type { Message } from "../../../../lib/mail/mailApi.js";
|
|
7
7
|
import { outboxItemStatus } from "../../mail/outbox/outboxState.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import Button from "
|
|
7
|
-
import Modal from "
|
|
6
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
7
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
8
8
|
|
|
9
9
|
export interface PermanentDeleteDialogProps {
|
|
10
10
|
open: boolean;
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { PropsWithChildren, createContext, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { DraftThreading } from "
|
|
7
|
-
import
|
|
6
|
+
import { DraftThreading } from "../../../../../lib/mail/mailApi.js";
|
|
7
|
+
import { ApiClient } from "../../../../../lib/util/api.js";
|
|
8
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
9
|
+
import useIsMobile from "../../../../../lib/util/useIsMobile.js";
|
|
8
10
|
import { ResumeCompose, registerComposeOpener } from "../../../mail/outbox/composeBridge.js";
|
|
9
11
|
import { markComposePhase } from "./composePerf.js";
|
|
10
12
|
import ComposeWindowPlaceholder from "./ComposeWindowPlaceholder.js";
|
|
@@ -169,6 +171,14 @@ export interface OpenComposeInput {
|
|
|
169
171
|
export interface ComposeContextValue {
|
|
170
172
|
/** Opens a new compose window, stacked alongside any already open (Gmail allows several at once). */
|
|
171
173
|
openCompose: (input: OpenComposeInput) => void;
|
|
174
|
+
/**
|
|
175
|
+
* The active account's `ApiClient` (see `useApiClient()`'s own doc comment), resolved once here rather
|
|
176
|
+
* than by every compose component individually - `ComposeWindow` and everything it renders reach it
|
|
177
|
+
* through this context's own value instead of each calling `useApiClient()` for itself. `useApiClient()`
|
|
178
|
+
* remains independently callable (this is additive, not a replacement) - a future consumer that isn't a
|
|
179
|
+
* descendant of `ComposeProvider` (or doesn't want to depend on it) can still read it directly.
|
|
180
|
+
*/
|
|
181
|
+
client?: ApiClient;
|
|
172
182
|
}
|
|
173
183
|
|
|
174
184
|
const ComposeContext = createContext<ComposeContextValue>({ openCompose: () => undefined });
|
|
@@ -187,6 +197,7 @@ export function useCompose(): ComposeContextValue {
|
|
|
187
197
|
*/
|
|
188
198
|
export default function ComposeProvider({ children, userUid, trusted }: PropsWithChildren<{ userUid?: string; trusted?: boolean }>) {
|
|
189
199
|
const [sessions, setSessions] = useState<ComposeSession[]>([]);
|
|
200
|
+
const client = useApiClient();
|
|
190
201
|
const isMobile = useIsMobile();
|
|
191
202
|
const { Component: ComposeWindow, failed, retry: retryLoad } = useComposeWindowComponent(sessions.length > 0);
|
|
192
203
|
|
|
@@ -263,7 +274,7 @@ export default function ComposeProvider({ children, userUid, trusted }: PropsWit
|
|
|
263
274
|
setSessions((prev) => prev.map((s) => (s.id === id ? { ...s, minimized: !s.minimized } : s)));
|
|
264
275
|
}
|
|
265
276
|
|
|
266
|
-
const value = useMemo<ComposeContextValue>(() => ({ openCompose }), []);
|
|
277
|
+
const value = useMemo<ComposeContextValue>(() => ({ openCompose, client }), [client]);
|
|
267
278
|
// Code with no React context - a failed send's "Open draft" pop-up - opens windows through this.
|
|
268
279
|
useEffect(() => registerComposeOpener((input) => value.openCompose(input)), [value]);
|
|
269
280
|
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
HiOutlineTrash,
|
|
14
14
|
HiOutlineXMark,
|
|
15
15
|
} from "react-icons/hi2";
|
|
16
|
-
import { ApiRequestError } from "
|
|
16
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
17
17
|
import {
|
|
18
18
|
Attachment,
|
|
19
19
|
ComposeRecipientInput,
|
|
@@ -28,16 +28,16 @@ import {
|
|
|
28
28
|
listFolders,
|
|
29
29
|
listMailboxes,
|
|
30
30
|
uploadAttachment,
|
|
31
|
-
} from "
|
|
32
|
-
import { listMailSignatures } from "
|
|
33
|
-
import { buildComposeBodyHtml } from "
|
|
31
|
+
} from "../../../../../lib/mail/mailApi.js";
|
|
32
|
+
import { listMailSignatures } from "../../../../../lib/mail/mailSignaturesApi.js";
|
|
33
|
+
import { buildComposeBodyHtml } from "../../../../../lib/mail/compose/composeQuoting.js";
|
|
34
34
|
import { peekMailboxWritability, useMailboxWritability } from "../writableMailboxes.js";
|
|
35
35
|
import { orderMailboxes, primaryMailboxUid } from "../../../mail/primaryMailbox.js";
|
|
36
|
-
import { resolveRecipientEncryption, RecipientEncryptionStatus } from "
|
|
37
|
-
import { getUnlockedKeys, subscribeKeySession } from "
|
|
38
|
-
import { EncryptionPolicy, findActivePublicKey, getEncryptionPolicy, lookupKeys } from "
|
|
36
|
+
import { resolveRecipientEncryption, RecipientEncryptionStatus } from "../../../../../lib/crypto/composeSecurity.js";
|
|
37
|
+
import { getUnlockedKeys, subscribeKeySession } from "../../../../../lib/crypto/keySession.js";
|
|
38
|
+
import { EncryptionPolicy, findActivePublicKey, getEncryptionPolicy, lookupKeys } from "../../../../../lib/crypto/keyvaultApi.js";
|
|
39
39
|
import { useUnlockPrompt } from "../../layout/UnlockPromptProvider.js";
|
|
40
|
-
import useIsMobile from "
|
|
40
|
+
import useIsMobile from "../../../../../lib/util/useIsMobile.js";
|
|
41
41
|
import { notify } from "../../../notifications/store.js";
|
|
42
42
|
import { evaluateEncryptionRequirement } from "./encryptionRequirement.js";
|
|
43
43
|
import { decideSend, SendBlock } from "../../../mail/outbox/sendDecision.js";
|
|
@@ -53,9 +53,9 @@ import RecipientInput from "./RecipientInput.js";
|
|
|
53
53
|
import { parseRecipientList } from "./recipients.js";
|
|
54
54
|
import RichTextEditor from "./RichTextEditor.js";
|
|
55
55
|
import ScheduleSendPicker from "./ScheduleSendPicker.js";
|
|
56
|
-
import Alert from "
|
|
57
|
-
import Button from "
|
|
58
|
-
import Modal from "
|
|
56
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
57
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
58
|
+
import Modal from "../../../../../lib/components/overlays/Modal.js";
|
|
59
59
|
|
|
60
60
|
export interface ComposeWindowProps {
|
|
61
61
|
session: ComposeSession;
|
|
@@ -221,7 +221,11 @@ export default function ComposeWindow({
|
|
|
221
221
|
const [hasUploads, setHasUploads] = useState(!!resume && resume.attachments.length > 0);
|
|
222
222
|
const isMobile = useIsMobile();
|
|
223
223
|
const { requestUnlock } = useUnlockPrompt();
|
|
224
|
-
|
|
224
|
+
// Resolved once by `ComposeProvider` (see `ComposeContext.tsx`'s own doc comment on `ComposeContextValue.client`)
|
|
225
|
+
// rather than calling `useApiClient()` again here - every REST call below (including `startSend()`'s own,
|
|
226
|
+
// see `sendJob.ts`) passes it through as the trailing `client` argument, `undefined` (the default global
|
|
227
|
+
// cookie-based fetch) for every existing caller.
|
|
228
|
+
const { openCompose, client } = useCompose();
|
|
225
229
|
const keyEnv = useKeyEnvironment();
|
|
226
230
|
// Bumped after a successful on-demand unlock to force a re-render - `getUnlockedKeys()` below is a
|
|
227
231
|
// plain read from a module-level store, not React state, so nothing else would pick up the change.
|
|
@@ -325,7 +329,7 @@ export default function ComposeWindow({
|
|
|
325
329
|
|
|
326
330
|
useEffect(() => {
|
|
327
331
|
let cancelled = false;
|
|
328
|
-
listMailboxes({ limit: 100 })
|
|
332
|
+
listMailboxes({ limit: 100 }, client)
|
|
329
333
|
.then((result) => {
|
|
330
334
|
if (cancelled) {
|
|
331
335
|
return;
|
|
@@ -363,7 +367,7 @@ export default function ComposeWindow({
|
|
|
363
367
|
async function load() {
|
|
364
368
|
await Promise.all([
|
|
365
369
|
mailboxLoaded ||
|
|
366
|
-
getMailbox(mailboxUid
|
|
370
|
+
getMailbox(mailboxUid!, {}, client).then(
|
|
367
371
|
(result) => {
|
|
368
372
|
mailboxLoaded = true;
|
|
369
373
|
if (!cancelled) {
|
|
@@ -373,7 +377,7 @@ export default function ComposeWindow({
|
|
|
373
377
|
() => undefined,
|
|
374
378
|
),
|
|
375
379
|
policyLoaded ||
|
|
376
|
-
getEncryptionPolicy().then(
|
|
380
|
+
getEncryptionPolicy(client).then(
|
|
377
381
|
(result) => {
|
|
378
382
|
policyLoaded = true;
|
|
379
383
|
if (!cancelled) {
|
|
@@ -401,7 +405,7 @@ export default function ComposeWindow({
|
|
|
401
405
|
// Cancellable so a slow response for a mailbox the user has since switched away from can't point
|
|
402
406
|
// the new draft at the wrong mailbox's Drafts folder.
|
|
403
407
|
let cancelled = false;
|
|
404
|
-
listFolders(mailboxUid)
|
|
408
|
+
listFolders(mailboxUid, client)
|
|
405
409
|
.then((folders) => {
|
|
406
410
|
if (!cancelled) {
|
|
407
411
|
setDraftsFolderUid(folders.find((f) => f.type === "drafts")?.uid);
|
|
@@ -441,7 +445,7 @@ export default function ComposeWindow({
|
|
|
441
445
|
for (const recipient of unchecked) {
|
|
442
446
|
const key = addressCacheKey(recipient.address);
|
|
443
447
|
inFlight.add(key);
|
|
444
|
-
void lookupKeys(mailbox.uid, recipient.address)
|
|
448
|
+
void lookupKeys(mailbox.uid, recipient.address, client)
|
|
445
449
|
.then(
|
|
446
450
|
(lookup) => ({ lookup }),
|
|
447
451
|
() => null,
|
|
@@ -512,7 +516,7 @@ export default function ComposeWindow({
|
|
|
512
516
|
if (!mailboxUid || contentReady || defaultSignature) {
|
|
513
517
|
return;
|
|
514
518
|
}
|
|
515
|
-
listMailSignatures(mailboxUid)
|
|
519
|
+
listMailSignatures(mailboxUid, {}, client)
|
|
516
520
|
.then((signatures) => {
|
|
517
521
|
const signature = signatures.find((s) =>
|
|
518
522
|
signatureContext === "new" ? s.isDefaultForNewMessages : s.isDefaultForReplyForward,
|
|
@@ -548,11 +552,11 @@ export default function ComposeWindow({
|
|
|
548
552
|
// `In-Reply-To`/`References` and groups the message into the thread being answered. Recorded on
|
|
549
553
|
// every draft this window creates, including the replacement one a From switch makes - the thread
|
|
550
554
|
// doesn't change because the sending mailbox did.
|
|
551
|
-
createDraft(mailboxUid, draftsFolderUid, session.threading)
|
|
555
|
+
createDraft(mailboxUid, draftsFolderUid, session.threading, client)
|
|
552
556
|
.then((created) => {
|
|
553
557
|
if (cancelled) {
|
|
554
558
|
// The sender changed while this was in flight - discard the now-orphaned draft.
|
|
555
|
-
void deleteMessage(created.uid, created.version).catch(() => undefined);
|
|
559
|
+
void deleteMessage(created.uid, created.version, client).catch(() => undefined);
|
|
556
560
|
return;
|
|
557
561
|
}
|
|
558
562
|
setDraft(created);
|
|
@@ -597,12 +601,12 @@ export default function ComposeWindow({
|
|
|
597
601
|
// Once it's out of `supersededDraftsRef` a landing save can't update `superseded.version` any more.
|
|
598
602
|
const version = saved?.uid === superseded.uid ? saved.version : superseded.version;
|
|
599
603
|
try {
|
|
600
|
-
await deleteMessage(superseded.uid, version);
|
|
604
|
+
await deleteMessage(superseded.uid, version, client);
|
|
601
605
|
} catch {
|
|
602
606
|
try {
|
|
603
|
-
const fresh = await getMessage(superseded.uid);
|
|
607
|
+
const fresh = await getMessage(superseded.uid, client);
|
|
604
608
|
if (isStillDraft(fresh, superseded.folderUid)) {
|
|
605
|
-
await deleteMessage(fresh.uid, fresh.version);
|
|
609
|
+
await deleteMessage(fresh.uid, fresh.version, client);
|
|
606
610
|
}
|
|
607
611
|
} catch {
|
|
608
612
|
// Already gone, or the server is unreachable - nothing more to do from here.
|
|
@@ -741,7 +745,7 @@ export default function ComposeWindow({
|
|
|
741
745
|
* current version. */
|
|
742
746
|
async function refreshDraftVersion(uid: string) {
|
|
743
747
|
try {
|
|
744
|
-
const fresh = await getMessage(uid);
|
|
748
|
+
const fresh = await getMessage(uid, client);
|
|
745
749
|
setDraft((prev) => (prev?.uid === fresh.uid && fresh.version > prev.version ? { ...prev, version: fresh.version } : prev));
|
|
746
750
|
} catch {
|
|
747
751
|
// Discard's own retry covers a version this couldn't refresh.
|
|
@@ -851,7 +855,7 @@ export default function ComposeWindow({
|
|
|
851
855
|
}
|
|
852
856
|
pendingSaveRef.current = false;
|
|
853
857
|
finishedRef.current = true;
|
|
854
|
-
if (!startSend(request)) {
|
|
858
|
+
if (!startSend(request, client)) {
|
|
855
859
|
finishedRef.current = false;
|
|
856
860
|
setSendError("This message is already being sent.");
|
|
857
861
|
return;
|
|
@@ -917,7 +921,7 @@ export default function ComposeWindow({
|
|
|
917
921
|
bcc: parseAddresses(current.bcc),
|
|
918
922
|
subject: current.subject,
|
|
919
923
|
html: current.html,
|
|
920
|
-
});
|
|
924
|
+
}, client);
|
|
921
925
|
lastSavedRef.current = savedKey;
|
|
922
926
|
saveErrorRef.current = null;
|
|
923
927
|
// A From switch may have replaced the draft while this was in flight - never resurrect it,
|
|
@@ -958,12 +962,12 @@ export default function ComposeWindow({
|
|
|
958
962
|
const saved = await saveInFlightRef.current;
|
|
959
963
|
const version = Math.max(current.version, saved?.uid === current.uid ? saved.version : 0);
|
|
960
964
|
try {
|
|
961
|
-
await deleteMessage(current.uid, version);
|
|
965
|
+
await deleteMessage(current.uid, version, client);
|
|
962
966
|
} catch (err) {
|
|
963
967
|
if (!(err instanceof ApiRequestError) || (err.status !== 404 && err.status !== 409)) {
|
|
964
968
|
throw err;
|
|
965
969
|
}
|
|
966
|
-
const fresh = await getMessage(current.uid).catch((getErr: unknown) => {
|
|
970
|
+
const fresh = await getMessage(current.uid, client).catch((getErr: unknown) => {
|
|
967
971
|
if (getErr instanceof ApiRequestError && getErr.status === 404) {
|
|
968
972
|
return null;
|
|
969
973
|
}
|
|
@@ -976,7 +980,7 @@ export default function ComposeWindow({
|
|
|
976
980
|
if (!isStillDraft(fresh, current.folderUid)) {
|
|
977
981
|
throw new ApiRequestError(NO_LONGER_A_DRAFT_MESSAGE, 409);
|
|
978
982
|
}
|
|
979
|
-
await deleteMessage(fresh.uid, fresh.version);
|
|
983
|
+
await deleteMessage(fresh.uid, fresh.version, client);
|
|
980
984
|
}
|
|
981
985
|
}
|
|
982
986
|
|
|
@@ -1130,7 +1134,7 @@ export default function ComposeWindow({
|
|
|
1130
1134
|
await previous;
|
|
1131
1135
|
try {
|
|
1132
1136
|
// Its answer (the new version) is what a later delete waits for through `saveInFlightRef`, like any save's.
|
|
1133
|
-
return await assembleDraft(target.uid, { to: [], cc: [], bcc: [], subject: "", html: "" });
|
|
1137
|
+
return await assembleDraft(target.uid, { to: [], cc: [], bcc: [], subject: "", html: "" }, client);
|
|
1134
1138
|
} catch {
|
|
1135
1139
|
notify({
|
|
1136
1140
|
id: `scrub-draft:${target.uid}`,
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { useEffect } from "react";
|
|
6
6
|
import { HiOutlineMinus, HiOutlineXMark } from "react-icons/hi2";
|
|
7
|
-
import Skeleton from "
|
|
8
|
-
import Alert from "
|
|
9
|
-
import Button from "
|
|
10
|
-
import useIsMobile from "
|
|
7
|
+
import Skeleton from "../../../../../lib/components/feedback/Skeleton.js";
|
|
8
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
9
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
10
|
+
import useIsMobile from "../../../../../lib/util/useIsMobile.js";
|
|
11
11
|
import type { ComposeSession } from "./ComposeContext.js";
|
|
12
12
|
import { markComposePhase } from "./composePerf.js";
|
|
13
13
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { RefObject } from "react";
|
|
6
|
-
import { EMOJI_CATEGORIES } from "
|
|
7
|
-
import PopoverPortal from "
|
|
6
|
+
import { EMOJI_CATEGORIES } from "../../../../../lib/mail/compose/emojiData.js";
|
|
7
|
+
import PopoverPortal from "../../../../../lib/components/overlays/PopoverPortal.js";
|
|
8
8
|
|
|
9
9
|
export interface EmojiPickerProps {
|
|
10
10
|
anchorRef: RefObject<HTMLElement | null>;
|