@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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
+
import { getUnlockedKeys } from "../../../../../lib/crypto/keySession.js";
|
|
6
|
+
import { listConversationMessages } from "../../../../../lib/mail/conversationsApi.js";
|
|
7
|
+
import { formatMailAddress } from "../../../../../lib/mail/mailAddress.js";
|
|
8
|
+
import { getMessageRawContent, listAttachments, type Message, type Recipient } from "../../../../../lib/mail/mailApi.js";
|
|
9
|
+
import type { ApiClient } from "../../../../../lib/util/api.js";
|
|
10
|
+
import { fetchBodyContent } from "./bodyContent.js";
|
|
11
|
+
import { ENCRYPTED_SUBJECT_PLACEHOLDER, displaySubject } from "./EncryptedPreview.js";
|
|
12
|
+
import type { PrintableMessage } from "./printMessage.js";
|
|
13
|
+
|
|
14
|
+
const format = (list: Recipient[]) => list.map((r) => formatMailAddress(r)).join(", ");
|
|
15
|
+
|
|
16
|
+
/** The header lines printed above a message's body. */
|
|
17
|
+
export function printHeaders(message: Message, from: string): PrintableMessage["headers"] {
|
|
18
|
+
return [
|
|
19
|
+
{ name: "From", value: from },
|
|
20
|
+
{ name: "To", value: format(message.recipients.filter((r) => r.type !== "cc" && r.type !== "bcc")) },
|
|
21
|
+
{ name: "Cc", value: format(message.recipients.filter((r) => r.type === "cc")) },
|
|
22
|
+
{ name: "Date", value: new Date(message.receivedDate).toLocaleString() },
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The messages of `message`'s conversation that came before it, newest first - the order they follow it in a printed conversation. A conversation
|
|
28
|
+
* the server has no id for (or one that can't be read) has none: the message prints alone.
|
|
29
|
+
*/
|
|
30
|
+
export async function olderConversationMessages(message: Message, client?: ApiClient): Promise<Message[]> {
|
|
31
|
+
if (!message.conversationId) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const thread = await listConversationMessages(message.mailboxUid, message.conversationId, { limit: 500 }, client);
|
|
35
|
+
const sent = new Date(message.receivedDate).getTime();
|
|
36
|
+
return thread
|
|
37
|
+
.filter((other) => other.uid !== message.uid && new Date(other.receivedDate).getTime() <= sent)
|
|
38
|
+
.sort((a, b) => new Date(b.receivedDate).getTime() - new Date(a.receivedDate).getTime());
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* One earlier message of a conversation as it prints: the body the reading pane would show. An encrypted one is decrypted here when this device has
|
|
43
|
+
* its mailbox's keys unlocked; when it can't be, it prints a line saying so rather than the ciphertext.
|
|
44
|
+
*/
|
|
45
|
+
export async function printableOlderMessage(message: Message): Promise<PrintableMessage> {
|
|
46
|
+
const attachments = await listAttachments(message.folderUid, message.uid).catch(() => []);
|
|
47
|
+
if (message.encrypted) {
|
|
48
|
+
const unlocked = getUnlockedKeys(message.mailboxUid);
|
|
49
|
+
if (unlocked) {
|
|
50
|
+
const { evaluateMessageSecurity } = await import("../../../../../lib/crypto/messageSecurity.js");
|
|
51
|
+
const security = await evaluateMessageSecurity(await getMessageRawContent(message.uid), unlocked);
|
|
52
|
+
const content =
|
|
53
|
+
security.text !== undefined ? ({ kind: "text", text: security.text } as const) : security.html !== undefined ? ({ kind: "html", html: security.html } as const) : undefined;
|
|
54
|
+
if (content) {
|
|
55
|
+
return {
|
|
56
|
+
subject: (message.subject === ENCRYPTED_SUBJECT_PLACEHOLDER ? security.subject : undefined) || displaySubject(message.subject) || "(no subject)",
|
|
57
|
+
headers: printHeaders(message, formatMailAddress(message.from)),
|
|
58
|
+
content,
|
|
59
|
+
attachments,
|
|
60
|
+
inlineParts: security.attachments,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
subject: displaySubject(message.subject) || "(no subject)",
|
|
66
|
+
headers: printHeaders(message, formatMailAddress(message.from)),
|
|
67
|
+
content: { kind: "text", text: "This message is encrypted and could not be decrypted, so it is not printed." },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
subject: message.subject || "(no subject)",
|
|
72
|
+
headers: printHeaders(message, formatMailAddress(message.from)),
|
|
73
|
+
content: await fetchBodyContent(message.uid, message.version),
|
|
74
|
+
attachments,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { binaryStringToBytes, extractAddresses, parseMimeEntity } from "
|
|
5
|
+
import { binaryStringToBytes, extractAddresses, parseMimeEntity } from "../../../../../lib/crypto/mime.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* What the reading pane does with a message's raw RFC 5322 source (`getMessageRawContent()`, a binary string): show it, save it as a
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import type { Attachment } from "
|
|
6
|
-
import type { MimeAttachment } from "
|
|
5
|
+
import type { Attachment } from "../../../../../lib/mail/mailApi.js";
|
|
6
|
+
import type { MimeAttachment } from "../../../../../lib/crypto/mime.js";
|
|
7
7
|
import { BodyContent, attachmentSource, makeCidResolver } from "./bodyContent.js";
|
|
8
8
|
import { prepareBodyHtml } from "./bodyHtml.js";
|
|
9
9
|
import { frameCsp } from "./frameDocument.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Printing
|
|
12
|
+
* Printing a message, and the conversation it belongs to: a document of its own - each message's header lines, and under them the same sanitized body the reading pane draws -
|
|
13
13
|
* shown in a frame that nobody sees and printed from there, so the print is the message and not the app around it.
|
|
14
14
|
*
|
|
15
15
|
* The frame is as isolated as the reading pane's own (`frameDocument.ts`): the body has been through `prepareBodyHtml()`, the document
|
|
@@ -35,6 +35,8 @@ dl{margin:0 0 12px;display:grid;grid-template-columns:max-content 1fr;gap:2px 12
|
|
|
35
35
|
dt{font-weight:600;color:#444}
|
|
36
36
|
dd{margin:0;overflow-wrap:anywhere}
|
|
37
37
|
hr{border:0;border-top:1px solid #999;margin:0 0 16px}
|
|
38
|
+
h2{font-size:16px;margin:0 0 12px}
|
|
39
|
+
.rr-older{margin-top:28px;padding-top:20px;border-top:2px solid #000;break-inside:auto}
|
|
38
40
|
#rr-body{overflow-wrap:break-word}
|
|
39
41
|
#rr-body img{max-width:100%;height:auto}
|
|
40
42
|
#rr-body pre,pre.rr-text{white-space:pre-wrap;font:inherit;margin:0}
|
|
@@ -44,10 +46,14 @@ export function escapeHtml(text: string): string {
|
|
|
44
46
|
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
interface PrintSection {
|
|
50
|
+
/** The `<dl>`, rule and body of one message. */
|
|
51
|
+
html: string;
|
|
52
|
+
imageSource?: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** One message's header lines and body, or `undefined` for a body too large to prepare (the pane does not draw it either). */
|
|
56
|
+
function renderSection(message: PrintableMessage): PrintSection | undefined {
|
|
51
57
|
let body: string;
|
|
52
58
|
let imageSource: string | undefined;
|
|
53
59
|
if (message.content.kind === "html") {
|
|
@@ -65,13 +71,44 @@ export function buildPrintDocument(message: PrintableMessage): string | undefine
|
|
|
65
71
|
.filter((header) => header.value !== "")
|
|
66
72
|
.map((header) => `<dt>${escapeHtml(header.name)}</dt><dd>${escapeHtml(header.value)}</dd>`)
|
|
67
73
|
.join("");
|
|
74
|
+
return { html: `<dl>${lines}</dl><hr>${body}`, imageSource };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The document to print, or `undefined` for a body too large to prepare (the pane does not draw it either).
|
|
79
|
+
*/
|
|
80
|
+
export function buildPrintDocument(message: PrintableMessage): string | undefined {
|
|
81
|
+
return buildConversationPrintDocument(message.subject, [message]);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The document to print for a conversation: `subject` as the title, then each of `messages` in the order given (the message that was asked for
|
|
86
|
+
* first, then the ones before it), each under its own header lines and set apart from the last. A message whose subject differs from the title
|
|
87
|
+
* says so under its rule. Only the first message is required to be printable: a later one too large to prepare is replaced by a note saying so.
|
|
88
|
+
*/
|
|
89
|
+
export function buildConversationPrintDocument(subject: string, messages: PrintableMessage[]): string | undefined {
|
|
90
|
+
const sections: string[] = [];
|
|
91
|
+
let imageSource: string | undefined;
|
|
92
|
+
for (const [index, message] of messages.entries()) {
|
|
93
|
+
const section = renderSection(message);
|
|
94
|
+
if (section === undefined && index === 0) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
imageSource ??= section?.imageSource;
|
|
98
|
+
const html = section?.html ?? `<p>${escapeHtml(`"${message.subject}" is too large to print here.`)}</p>`;
|
|
99
|
+
sections.push(
|
|
100
|
+
index === 0
|
|
101
|
+
? html
|
|
102
|
+
: `<div class="rr-older">${message.subject !== subject ? `<h2>${escapeHtml(message.subject)}</h2>` : ""}${html}</div>`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
68
105
|
return [
|
|
69
106
|
"<!doctype html>",
|
|
70
107
|
'<html lang="en"><head><meta charset="utf-8">',
|
|
71
108
|
`<meta http-equiv="Content-Security-Policy" content="${frameCsp(imageSource)}">`,
|
|
72
|
-
`<title>${escapeHtml(
|
|
109
|
+
`<title>${escapeHtml(subject)}</title>`,
|
|
73
110
|
`<style>${PRINT_CSS}</style></head>`,
|
|
74
|
-
`<body><h1>${escapeHtml(
|
|
111
|
+
`<body><h1>${escapeHtml(subject)}</h1>${sections.join("")}</body></html>`,
|
|
75
112
|
].join("");
|
|
76
113
|
}
|
|
77
114
|
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
moveMessage,
|
|
13
13
|
reportMessage,
|
|
14
14
|
setMessageFlagged,
|
|
15
|
-
} from "
|
|
15
|
+
} from "../../../../../lib/mail/mailApi.js";
|
|
16
16
|
import {
|
|
17
17
|
SenderListsChange,
|
|
18
18
|
addBlockedSender,
|
|
@@ -20,8 +20,9 @@ import {
|
|
|
20
20
|
checkSenderEntry,
|
|
21
21
|
removeBlockedSender,
|
|
22
22
|
removeSafeSender,
|
|
23
|
-
} from "
|
|
24
|
-
import { ApiRequestError } from "
|
|
23
|
+
} from "../../../../../lib/mail/senderListsApi.js";
|
|
24
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
25
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
25
26
|
import type { CountTracker } from "../../../mail/folderCounts.js";
|
|
26
27
|
import { resolveFolderOfType } from "../../../mail/folderOfType.js";
|
|
27
28
|
import { setReadStateMany } from "../../../mail/messageReadState.js";
|
|
@@ -100,6 +101,7 @@ function isNotFound(err: unknown): boolean {
|
|
|
100
101
|
export function useMessageActions(params: MessageActionsParams): MessageActions {
|
|
101
102
|
const { message, newest, remember, folders, inJunk, inDeletedItems, ownAddresses = [], trackMessageChange, onMoved, onChanged, onFolderCreated } = params;
|
|
102
103
|
const [busy, setBusy] = useState(false);
|
|
104
|
+
const client = useApiClient();
|
|
103
105
|
const permanent = usePermanentDelete();
|
|
104
106
|
|
|
105
107
|
/** Runs one action with the card's other actions held meanwhile. */
|
|
@@ -113,7 +115,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
function folderOf(type: Folder["type"], name: string): Promise<string> {
|
|
116
|
-
return resolveFolderOfType(message.mailboxUid, type, name, folders, onFolderCreated);
|
|
118
|
+
return resolveFolderOfType(message.mailboxUid, type, name, folders, onFolderCreated, client);
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
/** The card's part of a message having left its folder for `updated`'s: the folder badges and the local search index. */
|
|
@@ -126,7 +128,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
126
128
|
/** Moves the message into its mailbox's folder of `type`, and tells the folder badges and the local search index. */
|
|
127
129
|
async function moveToType(type: Folder["type"], name: string): Promise<Message> {
|
|
128
130
|
const before = newest();
|
|
129
|
-
const updated = await moveMessage(before, await folderOf(type, name));
|
|
131
|
+
const updated = await moveMessage(before, await folderOf(type, name), client);
|
|
130
132
|
relocated(before, updated);
|
|
131
133
|
return updated;
|
|
132
134
|
}
|
|
@@ -154,7 +156,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
154
156
|
{
|
|
155
157
|
label: "Undo",
|
|
156
158
|
onClick: () => {
|
|
157
|
-
removeSafeSender(message.mailboxUid, safeSender).then(
|
|
159
|
+
removeSafeSender(message.mailboxUid, safeSender, client).then(
|
|
158
160
|
() => notify({ kind: "info", title: `${safeSender} is no longer a safe sender`, message: "This message stays in the Inbox." }),
|
|
159
161
|
(err) => notifyApiError(err, "Couldn't undo trusting this sender"),
|
|
160
162
|
);
|
|
@@ -188,7 +190,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
188
190
|
await exclusive(async () => {
|
|
189
191
|
let result: MessageReportResult;
|
|
190
192
|
try {
|
|
191
|
-
result = await reportMessage(message.uid, kind, { alwaysTrustSender });
|
|
193
|
+
result = await reportMessage(message.uid, kind, { alwaysTrustSender }, client);
|
|
192
194
|
} catch (err) {
|
|
193
195
|
if (isNotFound(err)) {
|
|
194
196
|
await reportByMoving(kind, alwaysTrustSender);
|
|
@@ -225,13 +227,18 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
225
227
|
await exclusive(async () => {
|
|
226
228
|
const before = newest();
|
|
227
229
|
try {
|
|
228
|
-
await setReadStateMany(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
230
|
+
await setReadStateMany(
|
|
231
|
+
[before],
|
|
232
|
+
before.flags.read !== true,
|
|
233
|
+
{
|
|
234
|
+
patch: (updated, previous) => {
|
|
235
|
+
remember(updated);
|
|
236
|
+
onChanged?.(updated, previous);
|
|
237
|
+
},
|
|
238
|
+
track: trackMessageChange,
|
|
232
239
|
},
|
|
233
|
-
|
|
234
|
-
|
|
240
|
+
client,
|
|
241
|
+
);
|
|
235
242
|
} catch (err) {
|
|
236
243
|
notifyApiError(err, "Couldn't update the message");
|
|
237
244
|
}
|
|
@@ -242,7 +249,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
242
249
|
await exclusive(async () => {
|
|
243
250
|
const before = newest();
|
|
244
251
|
try {
|
|
245
|
-
const updated = await setMessageFlagged(before, before.flags.flagged !== true);
|
|
252
|
+
const updated = await setMessageFlagged(before, before.flags.flagged !== true, client);
|
|
246
253
|
remember(updated);
|
|
247
254
|
onChanged?.(updated, before);
|
|
248
255
|
} catch (err) {
|
|
@@ -289,7 +296,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
289
296
|
let result: Awaited<ReturnType<typeof blockSender>>;
|
|
290
297
|
try {
|
|
291
298
|
const [junkUid, inboxUid] = await Promise.all([folderOf("junk", "Junk Email"), folderOf("inbox", "Inbox")]);
|
|
292
|
-
result = await blockSender(message.mailboxUid, addresses, junkUid, inboxUid);
|
|
299
|
+
result = await blockSender(message.mailboxUid, addresses, junkUid, inboxUid, client);
|
|
293
300
|
} catch (err) {
|
|
294
301
|
notifyApiError(err, "Couldn't block this sender");
|
|
295
302
|
return;
|
|
@@ -306,7 +313,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
306
313
|
{
|
|
307
314
|
label: "Undo",
|
|
308
315
|
onClick: () => {
|
|
309
|
-
removeSenderRule(result.rule).then(
|
|
316
|
+
removeSenderRule(result.rule, client).then(
|
|
310
317
|
() => notify({ kind: "info", title: `Unblocked ${address}`, message: "The block was removed. This message stays where it is." }),
|
|
311
318
|
(err) => notifyApiError(err, "Couldn't undo the block"),
|
|
312
319
|
);
|
|
@@ -331,7 +338,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
331
338
|
}
|
|
332
339
|
let added: SenderListsChange;
|
|
333
340
|
try {
|
|
334
|
-
added = await addBlockedSender(message.mailboxUid, listed);
|
|
341
|
+
added = await addBlockedSender(message.mailboxUid, listed, client);
|
|
335
342
|
} catch (err) {
|
|
336
343
|
if (isNotFound(err)) {
|
|
337
344
|
await blockWithRules(all, message.from.address);
|
|
@@ -351,7 +358,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
351
358
|
{
|
|
352
359
|
label: "Undo",
|
|
353
360
|
onClick: () => {
|
|
354
|
-
removeBlockedSender(message.mailboxUid, listed).then(
|
|
361
|
+
removeBlockedSender(message.mailboxUid, listed, client).then(
|
|
355
362
|
() => notify({ kind: "info", title: `Unblocked ${listed}`, message: "The block was removed. This message stays where it is." }),
|
|
356
363
|
(err) => notifyApiError(err, "Couldn't undo the block"),
|
|
357
364
|
);
|
|
@@ -370,7 +377,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
370
377
|
let result: Awaited<ReturnType<typeof neverBlockSender>>;
|
|
371
378
|
try {
|
|
372
379
|
const [junkUid, inboxUid] = await Promise.all([folderOf("junk", "Junk Email"), folderOf("inbox", "Inbox")]);
|
|
373
|
-
result = await neverBlockSender(message.mailboxUid, addresses, junkUid, inboxUid);
|
|
380
|
+
result = await neverBlockSender(message.mailboxUid, addresses, junkUid, inboxUid, client);
|
|
374
381
|
} catch (err) {
|
|
375
382
|
notifyApiError(err, "Couldn't stop blocking this sender");
|
|
376
383
|
return;
|
|
@@ -392,7 +399,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
392
399
|
}
|
|
393
400
|
let added: SenderListsChange;
|
|
394
401
|
try {
|
|
395
|
-
added = await addSafeSender(message.mailboxUid, listed);
|
|
402
|
+
added = await addSafeSender(message.mailboxUid, listed, client);
|
|
396
403
|
} catch (err) {
|
|
397
404
|
if (isNotFound(err)) {
|
|
398
405
|
await neverBlockWithRules(all, message.from.address);
|
|
@@ -413,7 +420,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
413
420
|
{
|
|
414
421
|
label: "Undo",
|
|
415
422
|
onClick: () => {
|
|
416
|
-
removeSafeSender(message.mailboxUid, listed).then(
|
|
423
|
+
removeSafeSender(message.mailboxUid, listed, client).then(
|
|
417
424
|
() => notify({ kind: "info", title: `${listed} is no longer a safe sender`, message: "Its mail is filtered as usual again." }),
|
|
418
425
|
(err) => notifyApiError(err, "Couldn't undo the change"),
|
|
419
426
|
);
|
|
@@ -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
|
|
|
8
8
|
/**
|
|
9
9
|
* How an unread message looks in every list of mail (the message list, the conversation list and its child rows, the
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
* evaluation try again, never a retry loop. A stored seal is remembered (`currentVerificationSeal()`) so a message
|
|
19
19
|
* reopened before its list copy is refreshed opens that seal instead of building another.
|
|
20
20
|
*/
|
|
21
|
-
import { ApiRequestError } from "
|
|
22
|
-
import { getKeyVault } from "
|
|
23
|
-
import { subscribeKeySession } from "
|
|
24
|
-
import { type Message, setMessageVerificationSeal } from "
|
|
25
|
-
import type { SealToWrite } from "
|
|
21
|
+
import { ApiClient, ApiRequestError } from "../../../../lib/util/api.js";
|
|
22
|
+
import { getKeyVault } from "../../../../lib/crypto/keyvaultApi.js";
|
|
23
|
+
import { subscribeKeySession } from "../../../../lib/crypto/keySession.js";
|
|
24
|
+
import { type Message, setMessageVerificationSeal } from "../../../../lib/mail/mailApi.js";
|
|
25
|
+
import type { SealToWrite } from "../../../../lib/crypto/messageSecurity.js";
|
|
26
26
|
|
|
27
27
|
/** How long one mailbox's vault generation is reused before it is read again. */
|
|
28
28
|
export const VAULT_GENERATION_TTL_MS = 60_000;
|
|
@@ -59,23 +59,27 @@ function subscribeToLocksOnce(): void {
|
|
|
59
59
|
|
|
60
60
|
/** Reads `mailboxUid`'s current vault `masterKeyGeneration`, uncached: `undefined` when the vault can't be read or
|
|
61
61
|
* reports none. Never rejects. */
|
|
62
|
-
export async function readVaultGeneration(mailboxUid: string): Promise<number | undefined> {
|
|
62
|
+
export async function readVaultGeneration(mailboxUid: string, client?: ApiClient): Promise<number | undefined> {
|
|
63
63
|
try {
|
|
64
|
-
const { masterKeyGeneration } = await getKeyVault(mailboxUid);
|
|
64
|
+
const { masterKeyGeneration } = await getKeyVault(mailboxUid, client);
|
|
65
65
|
return Number.isSafeInteger(masterKeyGeneration) && masterKeyGeneration! >= 0 ? masterKeyGeneration : undefined;
|
|
66
66
|
} catch {
|
|
67
67
|
return undefined;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
/** `mailboxUid`'s current vault `masterKeyGeneration`, or `undefined` when it can't be read. Never rejects.
|
|
72
|
-
|
|
71
|
+
/** `mailboxUid`'s current vault `masterKeyGeneration`, or `undefined` when it can't be read. Never rejects.
|
|
72
|
+
*
|
|
73
|
+
* The cache below is keyed by `mailboxUid` alone, not by `client` - fine for every caller today (a
|
|
74
|
+
* `mailboxUid` belongs to one account's own `ApiClient`), but worth knowing if a future caller ever reused
|
|
75
|
+
* the same `mailboxUid` string across two different `ApiClient`s. */
|
|
76
|
+
export function getVaultGeneration(mailboxUid: string, client?: ApiClient): Promise<number | undefined> {
|
|
73
77
|
subscribeToLocksOnce();
|
|
74
78
|
const entry = generationCache.get(mailboxUid);
|
|
75
79
|
if (entry && Date.now() - entry.loadedAt <= VAULT_GENERATION_TTL_MS) {
|
|
76
80
|
return entry.generation;
|
|
77
81
|
}
|
|
78
|
-
const created = { loadedAt: Date.now(), generation: readVaultGeneration(mailboxUid) };
|
|
82
|
+
const created = { loadedAt: Date.now(), generation: readVaultGeneration(mailboxUid, client) };
|
|
79
83
|
generationCache.set(mailboxUid, created);
|
|
80
84
|
void created.generation.then((generation) => {
|
|
81
85
|
// Only a readable generation is reused; an unavailable one is read again next time.
|
|
@@ -106,14 +110,14 @@ export function verificationSealPending(messageUid: string, generation: number):
|
|
|
106
110
|
|
|
107
111
|
/** Stores `sealToWrite` on `messageUid`, best effort - see this module's doc comment. Resolves `true` when a request was
|
|
108
112
|
* sent, `false` when the write was skipped as already attempted. Never rejects. */
|
|
109
|
-
export async function sendVerificationSeal(messageUid: string, sealToWrite: SealToWrite): Promise<boolean> {
|
|
113
|
+
export async function sendVerificationSeal(messageUid: string, sealToWrite: SealToWrite, client?: ApiClient): Promise<boolean> {
|
|
110
114
|
const key = `${messageUid}:${sealToWrite.masterKeyGeneration}`;
|
|
111
115
|
if (attemptedWrites.has(key)) {
|
|
112
116
|
return false;
|
|
113
117
|
}
|
|
114
118
|
attemptedWrites.add(key);
|
|
115
119
|
try {
|
|
116
|
-
await setMessageVerificationSeal(messageUid, sealToWrite.seal, sealToWrite.masterKeyGeneration);
|
|
120
|
+
await setMessageVerificationSeal(messageUid, sealToWrite.seal, sealToWrite.masterKeyGeneration, client);
|
|
117
121
|
storedSeals.set(messageUid, sealToWrite);
|
|
118
122
|
} catch (err) {
|
|
119
123
|
// `VerificationSealConflictError` is an `ApiRequestError` with status 409.
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
* answer arrives.
|
|
19
19
|
*/
|
|
20
20
|
import { useEffect, useMemo, useState } from "react";
|
|
21
|
-
import type { Mailbox } from "
|
|
22
|
-
import { getMyMailboxAccess } from "
|
|
21
|
+
import type { Mailbox } from "../../../../lib/mail/mailApi.js";
|
|
22
|
+
import { getMyMailboxAccess } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
23
|
+
import type { ApiClient } from "../../../../lib/util/api.js";
|
|
24
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
23
25
|
|
|
24
26
|
/** `true` writable, `false` known view-only, `undefined` couldn't tell (treated as writable). */
|
|
25
27
|
export type MailboxWritability = boolean | undefined;
|
|
@@ -42,15 +44,19 @@ export function peekMailboxWritability(mailbox: Mailbox, userUid: string | undef
|
|
|
42
44
|
return isImplicitlyWritable(mailbox, userUid, trusted) ? true : settled.get(mailbox.uid);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
/** Whether the caller can create items in `mailbox`. Never rejects.
|
|
46
|
-
|
|
47
|
+
/** Whether the caller can create items in `mailbox`. Never rejects.
|
|
48
|
+
*
|
|
49
|
+
* `inFlight`/`settled` are keyed by `mailbox.uid` alone, not by `client` - fine for every caller today (a
|
|
50
|
+
* mailbox uid belongs to one account's own `ApiClient`), but worth knowing if a future caller ever reused
|
|
51
|
+
* the same mailbox uid across two different `ApiClient`s. */
|
|
52
|
+
export function getMailboxWritability(mailbox: Mailbox, userUid: string | undefined, trusted?: boolean, client?: ApiClient): Promise<MailboxWritability> {
|
|
47
53
|
const known = peekMailboxWritability(mailbox, userUid, trusted);
|
|
48
54
|
if (known !== undefined) {
|
|
49
55
|
return Promise.resolve(known);
|
|
50
56
|
}
|
|
51
57
|
let request = inFlight.get(mailbox.uid);
|
|
52
58
|
if (!request) {
|
|
53
|
-
request = getMyMailboxAccess(mailbox.uid).then(
|
|
59
|
+
request = getMyMailboxAccess(mailbox.uid, client).then(
|
|
54
60
|
(access) => {
|
|
55
61
|
settled.set(mailbox.uid, access.canCreate);
|
|
56
62
|
inFlight.delete(mailbox.uid);
|
|
@@ -70,11 +76,12 @@ export function getMailboxWritability(mailbox: Mailbox, userUid: string | undefi
|
|
|
70
76
|
/** Per-mailbox writability answers for `mailboxes`, filled in as each one arrives (already-known answers are
|
|
71
77
|
* present from the first render). */
|
|
72
78
|
export function useMailboxWritability(mailboxes: Mailbox[], userUid: string | undefined, trusted?: boolean): Record<string, MailboxWritability> {
|
|
79
|
+
const client = useApiClient();
|
|
73
80
|
const [answers, setAnswers] = useState<Record<string, MailboxWritability>>({});
|
|
74
81
|
useEffect(() => {
|
|
75
82
|
let cancelled = false;
|
|
76
83
|
for (const mailbox of mailboxes) {
|
|
77
|
-
void getMailboxWritability(mailbox, userUid, trusted).then((writable) => {
|
|
84
|
+
void getMailboxWritability(mailbox, userUid, trusted, client).then((writable) => {
|
|
78
85
|
if (!cancelled) {
|
|
79
86
|
setAnswers((prev) => ({ ...prev, [mailbox.uid]: writable }));
|
|
80
87
|
}
|
|
@@ -83,7 +90,7 @@ export function useMailboxWritability(mailboxes: Mailbox[], userUid: string | un
|
|
|
83
90
|
return () => {
|
|
84
91
|
cancelled = true;
|
|
85
92
|
};
|
|
86
|
-
}, [mailboxes, userUid, trusted]);
|
|
93
|
+
}, [mailboxes, userUid, trusted, client]);
|
|
87
94
|
return useMemo(() => {
|
|
88
95
|
const merged: Record<string, MailboxWritability> = {};
|
|
89
96
|
for (const mailbox of mailboxes) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { ReactNode, useState } from "react";
|
|
6
|
-
import Button from "
|
|
6
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
7
7
|
|
|
8
8
|
const INPUT_CLASS =
|
|
9
9
|
"flex-1 text-sm py-2 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
6
|
import { HiOutlineCheckCircle, HiOutlineExclamationTriangle, HiOutlineXCircle } from "react-icons/hi2";
|
|
7
|
-
import Alert from "
|
|
8
|
-
import Button from "
|
|
9
|
-
import CopyButton from "
|
|
10
|
-
import type { EnrollmentResult, SignEnrollmentStep } from "
|
|
7
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
8
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
9
|
+
import CopyButton from "../../../../lib/components/buttons/CopyButton.js";
|
|
10
|
+
import type { EnrollmentResult, SignEnrollmentStep } from "../../../../lib/crypto/keyvaultApi.js";
|
|
11
11
|
import type { EnrollmentSnapshot } from "../../signing/enrollmentTracker.js";
|
|
12
12
|
import type { SigningEnrollmentInfo } from "../../signing/signingInfo.js";
|
|
13
13
|
import {
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { createContext, PropsWithChildren, ReactNode, useContext, useEffect, useMemo, useState } from "react";
|
|
6
6
|
import { HiOutlineBars3 } from "react-icons/hi2";
|
|
7
|
-
import { ApiRequestError } from "
|
|
8
|
-
import Drawer from "
|
|
9
|
-
import { Mailbox, listMailboxes } from "
|
|
10
|
-
import
|
|
11
|
-
import
|
|
7
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
8
|
+
import Drawer from "../../../../../lib/components/overlays/Drawer.js";
|
|
9
|
+
import { Mailbox, listMailboxes } from "../../../../../lib/mail/mailApi.js";
|
|
10
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
11
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
12
|
+
import Skeleton, { SkeletonList } from "../../../../../lib/components/feedback/Skeleton.js";
|
|
12
13
|
import AppShell, { AppShellProps } from "../../layout/AppShell.js";
|
|
13
14
|
import { useLocation, useNavigate } from "../../../navigation/index.js";
|
|
14
15
|
import MailboxProvisioning from "../../layout/MailboxProvisioning.js";
|
|
@@ -93,6 +94,7 @@ export default function SettingsShell({
|
|
|
93
94
|
pluginNav,
|
|
94
95
|
children,
|
|
95
96
|
}: PropsWithChildren<SettingsShellProps>) {
|
|
97
|
+
const client = useApiClient();
|
|
96
98
|
const [status, setStatus] = useState<Status>("checking");
|
|
97
99
|
const [error, setError] = useState<string | null>(null);
|
|
98
100
|
const [mailboxes, setMailboxes] = useState<Mailbox[]>([]);
|
|
@@ -116,7 +118,7 @@ export default function SettingsShell({
|
|
|
116
118
|
if (!userUid) {
|
|
117
119
|
return;
|
|
118
120
|
}
|
|
119
|
-
listMailboxes({ limit: 100 })
|
|
121
|
+
listMailboxes({ limit: 100 }, client)
|
|
120
122
|
.then((result) => {
|
|
121
123
|
setMailboxes(orderMailboxes(result, userUid));
|
|
122
124
|
setStatus("ready");
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import { ResolvedPrincipal } from "
|
|
6
|
+
import { ResolvedPrincipal } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
7
7
|
import PrincipalResolver, { describePerson } from "./PrincipalResolver.js";
|
|
8
8
|
|
|
9
9
|
export interface PrincipalListFieldProps {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
ResolvedPrincipal,
|
|
9
9
|
resolveMailboxPrincipal,
|
|
10
10
|
setMailboxAccess,
|
|
11
|
-
} from "
|
|
11
|
+
} from "../../../../lib/mail/mailboxAccessApi.js";
|
|
12
12
|
import PrincipalResolver, { describePerson } from "./PrincipalResolver.js";
|
|
13
13
|
|
|
14
14
|
export { describePerson };
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { KeyboardEvent, ReactNode, useEffect, useState } from "react";
|
|
6
|
-
import { ApiRequestError } from "
|
|
7
|
-
import { ResolvedPrincipal } from "
|
|
8
|
-
import Alert from "
|
|
9
|
-
import Button from "
|
|
6
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
7
|
+
import { ResolvedPrincipal } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
8
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
9
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
10
10
|
|
|
11
11
|
export interface PrincipalResolverProps {
|
|
12
12
|
/** Resolves what was typed - a mailbox address, an auth-server username or e-mail alias, or a user uid - to
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { FormEvent, useEffect, useMemo, useState } from "react";
|
|
6
6
|
import { HiOutlineBars3 } from "react-icons/hi2";
|
|
7
|
-
import { ApiRequestError } from "
|
|
8
|
-
import { Task, TaskList, createTaskList, listTaskLists } from "
|
|
9
|
-
import Drawer from "
|
|
7
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
8
|
+
import { Task, TaskList, createTaskList, listTaskLists } from "../../../../lib/tasks/tasksApi.js";
|
|
9
|
+
import Drawer from "../../../../lib/components/overlays/Drawer.js";
|
|
10
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
10
11
|
import { notifyApiError } from "../../notifications/apiErrors.js";
|
|
11
12
|
|
|
12
13
|
export type TasksView =
|
|
@@ -61,6 +62,7 @@ function NavItem({ label, count, active, onClick }: { label: string; count?: num
|
|
|
61
62
|
* lists are real `TaskList` records, fetched here (same pattern as `ContactsSidebar`'s contact lists).
|
|
62
63
|
*/
|
|
63
64
|
export default function TasksSidebar({ mailboxUid, tasks, userUid, active, onSelect, refreshToken }: TasksSidebarProps) {
|
|
65
|
+
const client = useApiClient();
|
|
64
66
|
const [lists, setLists] = useState<TaskList[]>([]);
|
|
65
67
|
const [listsError, setListsError] = useState<string | null>(null);
|
|
66
68
|
const [addingList, setAddingList] = useState(false);
|
|
@@ -73,7 +75,7 @@ export default function TasksSidebar({ mailboxUid, tasks, userUid, active, onSel
|
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
77
|
setListsError(null);
|
|
76
|
-
listTaskLists(mailboxUid, { limit: 200 })
|
|
78
|
+
listTaskLists(mailboxUid, { limit: 200 }, client)
|
|
77
79
|
.then(setLists)
|
|
78
80
|
.catch((err) => setListsError(err instanceof ApiRequestError ? err.message : "Could not load task lists."));
|
|
79
81
|
}, [mailboxUid, refreshToken]);
|
|
@@ -98,7 +100,7 @@ export default function TasksSidebar({ mailboxUid, tasks, userUid, active, onSel
|
|
|
98
100
|
return;
|
|
99
101
|
}
|
|
100
102
|
try {
|
|
101
|
-
const created = await createTaskList({ mailboxUid, name: newListName.trim() });
|
|
103
|
+
const created = await createTaskList({ mailboxUid, name: newListName.trim() }, client);
|
|
102
104
|
setLists((prev) => [...prev, created].sort((a, b) => a.name.localeCompare(b.name)));
|
|
103
105
|
setNewListName("");
|
|
104
106
|
setAddingList(false);
|