@rapidmx/web-client 0.20.0 → 0.22.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 +415 -381
- package/apps/admin/_layout.tsx +2 -2
- package/apps/admin/audit-log/index.tsx +4 -4
- package/apps/admin/branding/index.tsx +39 -39
- package/apps/admin/data-requests/index.tsx +482 -482
- 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 +166 -166
- 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 +350 -350
- package/apps/admin/escrow-scopes/index.tsx +4 -4
- package/apps/admin/escrow-scopes/new/index.tsx +5 -5
- package/apps/admin/index.tsx +129 -129
- package/apps/admin/ingest-queue/index.tsx +4 -4
- package/apps/admin/mailbox-policy/index.tsx +1 -1
- package/apps/admin/mailboxes/[uid].tsx +271 -271
- package/apps/admin/mailboxes/new/index.tsx +30 -30
- package/apps/admin/plugins/index.tsx +15 -15
- package/apps/admin/quarantine/index.tsx +5 -5
- package/apps/admin/retention-policy/index.tsx +39 -39
- package/apps/admin/signing-certificates/index.tsx +343 -343
- 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 +196 -196
- package/apps/escrow/index.tsx +4 -4
- package/apps/escrow/matters/[uid].tsx +621 -621
- 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 +99 -99
- 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 +384 -384
- package/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.tsx +238 -238
- package/apps/shared/components/admin/mailboxes/EscrowScopeCard.tsx +154 -152
- package/apps/shared/components/admin/mailboxes/LeftoverMailboxesSection.tsx +194 -194
- 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 +423 -423
- package/apps/shared/components/admin/settings/DomainDnsSetup.tsx +5 -5
- package/apps/shared/components/admin/settings/EncryptionPolicyForm.tsx +119 -119
- 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 +198 -198
- package/apps/shared/components/admin/settings/PluginsManager.tsx +2093 -2093
- package/apps/shared/components/admin/settings/RetentionPolicyForm.tsx +182 -182
- package/apps/shared/components/admin/setup/EscrowSetupStep.tsx +288 -288
- package/apps/shared/components/admin/setup/SetupWizard.tsx +450 -446
- package/apps/shared/components/admin/signOut.ts +1 -1
- package/apps/shared/components/admin/usePagedList.tsx +129 -129
- 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 +206 -206
- 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 +185 -185
- 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 +227 -227
- 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 +144 -144
- package/apps/shared/components/calendar/TaskQuickForm.tsx +23 -18
- package/apps/shared/components/calendar/TimeGridView.tsx +246 -246
- package/apps/shared/components/calendar/allDay.ts +124 -124
- 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 +393 -383
- package/apps/shared/components/contacts/ContactsSidebar.tsx +7 -5
- package/apps/shared/components/contacts/ContactsToolbar.tsx +103 -103
- 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 +155 -155
- package/apps/shared/components/forms/StringListField.tsx +1 -1
- package/apps/shared/components/layout/AppShell.tsx +465 -461
- package/apps/shared/components/layout/BrandingChrome.tsx +1 -1
- package/apps/shared/components/layout/KeyEnrollmentGate.tsx +398 -398
- package/apps/shared/components/layout/MailboxProvisioning.tsx +170 -168
- package/apps/shared/components/layout/RecoveryCodeUnlock.tsx +9 -9
- package/apps/shared/components/layout/ResponsiveToolbar.tsx +315 -315
- package/apps/shared/components/layout/ThemeSwitch.tsx +84 -84
- package/apps/shared/components/layout/UnlockPromptProvider.tsx +6 -6
- package/apps/shared/components/layout/UserMenu.tsx +441 -439
- package/apps/shared/components/mail/ConversationList.tsx +334 -332
- package/apps/shared/components/mail/ConversationThreadPane.tsx +624 -613
- 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 +240 -240
- package/apps/shared/components/mail/MenuButton.tsx +404 -404
- package/apps/shared/components/mail/MessageDetailPane.tsx +1759 -1757
- 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 +323 -312
- package/apps/shared/components/mail/compose/ComposeToolbar.tsx +422 -422
- package/apps/shared/components/mail/compose/ComposeWindow.tsx +1709 -1681
- 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/RichTextEditor.tsx +147 -147
- package/apps/shared/components/mail/compose/ScheduleSendPicker.tsx +1 -1
- package/apps/shared/components/mail/compose/composeFlushRegistry.ts +60 -60
- package/apps/shared/components/mail/compose/encryptionRequirement.ts +2 -2
- package/apps/shared/components/mail/compose/quotedBody.ts +161 -161
- package/apps/shared/components/mail/compose/recipients.ts +1 -1
- package/apps/shared/components/mail/invite/InviteRowChip.tsx +2 -2
- package/apps/shared/components/mail/invite/InviteRsvpPopover.tsx +9 -7
- 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/MessageMoreMenu.tsx +258 -258
- package/apps/shared/components/mail/reading/MessageSourceDialog.tsx +79 -79
- 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/messageExport.ts +59 -59
- package/apps/shared/components/mail/reading/printMessage.ts +99 -99
- package/apps/shared/components/mail/reading/useMessageActions.ts +450 -443
- package/apps/shared/components/mail/unreadStyle.tsx +1 -1
- package/apps/shared/components/mail/verificationSeals.ts +129 -125
- package/apps/shared/components/mail/writableMailboxes.ts +14 -7
- package/apps/shared/components/rules/RuleBuilder.tsx +311 -311
- package/apps/shared/components/settings/SigningCertificateCard.tsx +344 -344
- 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/GlobalShortcuts.tsx +51 -51
- package/apps/shared/keyboard/ShortcutProvider.tsx +62 -62
- package/apps/shared/keyboard/ShortcutsDialog.tsx +84 -84
- package/apps/shared/keyboard/dispatch.ts +124 -124
- package/apps/shared/keyboard/format.ts +89 -89
- package/apps/shared/keyboard/keymap.ts +114 -114
- package/apps/shared/keyboard/registry.ts +65 -65
- package/apps/shared/keyboard/targets.ts +79 -79
- package/apps/shared/mail/findWellKnownFolderUid.ts +6 -4
- package/apps/shared/mail/folderCounts.ts +8 -4
- package/apps/shared/mail/folderOfType.ts +51 -49
- package/apps/shared/mail/folderTree.ts +143 -143
- package/apps/shared/mail/listAllPages.ts +39 -39
- package/apps/shared/mail/listSnapshots.ts +2 -2
- package/apps/shared/mail/messageReadState.ts +6 -5
- package/apps/shared/mail/newMailNotifications.ts +171 -171
- 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 +450 -445
- package/apps/shared/mail/outbox/sendOutcomes.ts +160 -155
- 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 +66 -66
- package/apps/shared/mail/senderBlocking.ts +157 -141
- package/apps/shared/mail/useMailConnection.ts +207 -205
- package/apps/shared/mail/useMailLiveUpdates.ts +277 -277
- package/apps/shared/mail/useMailboxUpdateAccess.ts +84 -60
- package/apps/shared/mail/useMarkMessageRead.ts +54 -47
- package/apps/shared/mail/useNewMailNotifications.ts +178 -178
- 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/store.ts +560 -560
- package/apps/shared/notifications/systemErrors.ts +1 -1
- package/apps/shared/search/LocalIndexLifecycle.tsx +120 -114
- package/apps/shared/search/crossMailboxSearch.ts +3 -3
- package/apps/shared/search/localIndexBuilder.ts +493 -481
- 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/enrollmentStorage.ts +33 -33
- package/apps/shared/signing/enrollmentTracker.ts +385 -385
- package/apps/shared/signing/enrollmentView.ts +251 -251
- package/apps/shared/signing/signingInfo.ts +1 -1
- package/apps/shared/signing/useNow.ts +19 -19
- package/apps/shared/signing/useSigningEnrollmentWatcher.ts +92 -90
- package/apps/shared/styles/app.css +387 -396
- package/apps/www/_layout.tsx +2 -2
- package/apps/www/calendar/index.tsx +583 -581
- package/apps/www/contacts/[uid].tsx +114 -112
- package/apps/www/contacts/index.tsx +19 -17
- package/apps/www/index.tsx +3021 -3012
- package/apps/www/messages/[uid].tsx +141 -139
- package/apps/www/settings/auto-reply/index.tsx +138 -136
- package/apps/www/settings/blocked-senders/index.tsx +305 -303
- package/apps/www/settings/encryption/index.tsx +1296 -1290
- package/apps/www/settings/filters/[uid].tsx +184 -179
- package/apps/www/settings/filters/_mailFilterRuleConfig.tsx +2 -2
- package/apps/www/settings/filters/index.tsx +105 -105
- package/apps/www/settings/filters/new/index.tsx +167 -165
- package/apps/www/settings/labels/index.tsx +209 -207
- package/apps/www/settings/privacy/index.tsx +499 -495
- package/apps/www/settings/profile/index.tsx +256 -251
- package/apps/www/settings/read-receipts/index.tsx +155 -150
- package/apps/www/settings/sharing/index.tsx +259 -259
- package/apps/www/settings/signatures/[uid].tsx +175 -175
- package/apps/www/settings/signatures/index.tsx +91 -91
- package/apps/www/settings/signatures/new/index.tsx +138 -138
- package/apps/www/settings/signatures/signatureDefaults.ts +1 -1
- package/apps/www/tasks/index.tsx +659 -654
- 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 +8 -8
- 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 +8 -8
- 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.js +26 -22
- 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 +1 -1
- 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 +7 -7
- 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 +14 -10
- 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 +6 -4
- package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/ConversationThreadPane.js +13 -11
- 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 +30 -28
- 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.d.ts +7 -1
- package/dist/apps/shared/components/mail/compose/ComposeWindow.js +54 -31
- 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 +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.js +9 -7
- 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/messageExport.js +1 -1
- package/dist/apps/shared/components/mail/reading/printMessage.d.ts +2 -2
- package/dist/apps/shared/components/mail/reading/printMessage.js +11 -11
- 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/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 +387 -396
- 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 +54 -50
- package/dist/apps/www/messages/[uid].d.ts +1 -1
- package/dist/apps/www/messages/[uid].js +11 -9
- package/dist/apps/www/settings/appearance/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.js +6 -4
- package/dist/apps/www/settings/blocked-senders/index.d.ts +1 -1
- package/dist/apps/www/settings/blocked-senders/index.js +6 -4
- package/dist/apps/www/settings/encryption/index.d.ts +1 -1
- package/dist/apps/www/settings/encryption/index.js +31 -29
- package/dist/apps/www/settings/filters/[uid].d.ts +1 -1
- package/dist/apps/www/settings/filters/[uid].js +11 -9
- package/dist/apps/www/settings/filters/_mailFilterRuleConfig.d.ts +2 -2
- package/dist/apps/www/settings/filters/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/index.js +4 -4
- package/dist/apps/www/settings/filters/new/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/new/index.js +10 -8
- package/dist/apps/www/settings/labels/index.d.ts +1 -1
- package/dist/apps/www/settings/labels/index.js +12 -10
- package/dist/apps/www/settings/privacy/index.d.ts +1 -1
- package/dist/apps/www/settings/privacy/index.js +18 -14
- package/dist/apps/www/settings/profile/index.d.ts +1 -1
- package/dist/apps/www/settings/profile/index.js +7 -5
- package/dist/apps/www/settings/read-receipts/index.d.ts +1 -1
- package/dist/apps/www/settings/read-receipts/index.js +5 -3
- package/dist/apps/www/settings/sharing/index.d.ts +1 -1
- package/dist/apps/www/settings/sharing/index.js +6 -6
- package/dist/apps/www/settings/signatures/[uid].d.ts +1 -1
- package/dist/apps/www/settings/signatures/[uid].js +5 -5
- package/dist/apps/www/settings/signatures/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/index.js +4 -4
- package/dist/apps/www/settings/signatures/new/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/new/index.js +4 -4
- package/dist/apps/www/settings/signatures/signatureDefaults.d.ts +1 -1
- package/dist/apps/www/settings/signatures/signatureDefaults.js +1 -1
- package/dist/apps/www/tasks/index.d.ts +1 -1
- package/dist/apps/www/tasks/index.js +17 -15
- package/dist/lib/admin/auditLogApi.d.ts +32 -0
- package/dist/lib/admin/auditLogApi.js +27 -0
- package/dist/lib/admin/distributionListsApi.d.ts +47 -0
- package/dist/lib/admin/distributionListsApi.js +34 -0
- package/dist/lib/admin/domainsApi.d.ts +75 -0
- package/dist/lib/admin/domainsApi.js +44 -0
- package/dist/lib/admin/escrowAccessRequestsApi.d.ts +79 -0
- package/dist/lib/admin/escrowAccessRequestsApi.js +46 -0
- package/dist/lib/admin/escrowAuditLogApi.d.ts +66 -0
- package/dist/lib/admin/escrowAuditLogApi.js +31 -0
- package/dist/lib/admin/escrowScopesApi.d.ts +78 -0
- package/dist/lib/admin/escrowScopesApi.js +50 -0
- package/dist/lib/admin/leftoverMailboxApi.d.ts +73 -0
- package/dist/lib/admin/leftoverMailboxApi.js +67 -0
- package/dist/lib/admin/mailboxPolicyApi.d.ts +27 -0
- package/dist/lib/admin/mailboxPolicyApi.js +21 -0
- package/dist/lib/admin/matterExportApi.d.ts +40 -0
- package/dist/lib/admin/matterExportApi.js +39 -0
- package/dist/lib/admin/matterSearchApi.d.ts +20 -0
- package/dist/lib/admin/matterSearchApi.js +27 -0
- package/dist/lib/admin/mattersApi.d.ts +56 -0
- package/dist/lib/admin/mattersApi.js +40 -0
- package/dist/lib/admin/pluginsApi.d.ts +265 -0
- package/dist/lib/admin/pluginsApi.js +102 -0
- package/dist/lib/admin/retentionPolicyApi.d.ts +32 -0
- package/dist/lib/admin/retentionPolicyApi.js +29 -0
- package/dist/lib/admin/setupApi.d.ts +23 -0
- package/dist/lib/admin/setupApi.js +26 -0
- package/dist/lib/admin/transportRulesApi.d.ts +66 -0
- package/dist/lib/admin/transportRulesApi.js +43 -0
- package/dist/lib/appearance/preferencesApi.d.ts +128 -0
- package/dist/lib/appearance/preferencesApi.js +257 -0
- package/dist/lib/auth/profileApi.d.ts +33 -0
- package/dist/lib/auth/profileApi.js +52 -0
- package/dist/lib/auth/session.d.ts +70 -0
- package/dist/lib/auth/session.js +210 -0
- package/dist/lib/branding/brandingApi.d.ts +47 -0
- package/dist/lib/branding/brandingApi.js +61 -0
- package/dist/lib/branding/useBranding.d.ts +23 -0
- package/dist/lib/branding/useBranding.js +65 -0
- package/dist/lib/calendar/calendarApi.d.ts +230 -0
- package/dist/lib/calendar/calendarApi.js +106 -0
- package/dist/lib/calendar/calendarColors.d.ts +18 -0
- package/dist/lib/calendar/calendarColors.js +39 -0
- package/dist/lib/calendar/calendarDragIds.d.ts +42 -0
- package/dist/lib/calendar/calendarDragIds.js +92 -0
- package/dist/lib/calendar/calendarMutations.d.ts +68 -0
- package/dist/lib/calendar/calendarMutations.js +190 -0
- package/dist/lib/calendar/eventDescription.d.ts +43 -0
- package/dist/lib/calendar/eventDescription.js +195 -0
- package/dist/lib/calendar/freeBusyApi.d.ts +100 -0
- package/dist/lib/calendar/freeBusyApi.js +119 -0
- package/dist/lib/calendar/inviteApi.d.ts +121 -0
- package/dist/lib/calendar/inviteApi.js +54 -0
- package/dist/lib/calendar/recurrence.d.ts +60 -0
- package/dist/lib/calendar/recurrence.js +225 -0
- package/dist/lib/components/avatar/ContactAvatar.d.ts +8 -0
- package/dist/lib/components/avatar/ContactAvatar.js +26 -0
- package/dist/lib/components/buttons/Button.d.ts +9 -0
- package/dist/lib/components/buttons/Button.js +14 -0
- package/dist/lib/components/buttons/CopyButton.d.ts +18 -0
- package/dist/lib/components/buttons/CopyButton.js +14 -0
- package/dist/lib/components/feedback/Alert.d.ts +4 -0
- package/dist/lib/components/feedback/Alert.js +4 -0
- package/dist/lib/components/feedback/Skeleton.d.ts +21 -0
- package/dist/lib/components/feedback/Skeleton.js +14 -0
- package/dist/lib/components/forms/FormField.d.ts +8 -0
- package/dist/lib/components/forms/FormField.js +5 -0
- package/dist/lib/components/navigation/BottomTabBar.d.ts +27 -0
- package/dist/lib/components/navigation/BottomTabBar.js +32 -0
- package/dist/lib/components/overlays/Drawer.d.ts +20 -0
- package/dist/lib/components/overlays/Drawer.js +27 -0
- package/dist/lib/components/overlays/Modal.d.ts +17 -0
- package/dist/lib/components/overlays/Modal.js +25 -0
- package/dist/lib/components/overlays/PopoverPortal.d.ts +23 -0
- package/dist/lib/components/overlays/PopoverPortal.js +53 -0
- package/dist/lib/components/overlays/overlayStack.d.ts +31 -0
- package/dist/lib/components/overlays/overlayStack.js +143 -0
- package/dist/lib/components/pickers/MiniDatePicker.d.ts +13 -0
- package/dist/lib/components/pickers/MiniDatePicker.js +42 -0
- package/dist/lib/contacts/contactsApi.d.ts +174 -0
- package/dist/lib/contacts/contactsApi.js +139 -0
- package/dist/lib/contacts/vcard.d.ts +23 -0
- package/dist/lib/contacts/vcard.js +179 -0
- package/dist/lib/crypto/composeSecurity.d.ts +67 -0
- package/dist/lib/crypto/composeSecurity.js +93 -0
- package/dist/lib/crypto/encoding.d.ts +9 -0
- package/dist/lib/crypto/encoding.js +32 -0
- package/dist/lib/crypto/escrowKeys.d.ts +25 -0
- package/dist/lib/crypto/escrowKeys.js +59 -0
- package/dist/lib/crypto/idleTimeout.d.ts +16 -0
- package/dist/lib/crypto/idleTimeout.js +47 -0
- package/dist/lib/crypto/keySession.d.ts +159 -0
- package/dist/lib/crypto/keySession.js +367 -0
- package/dist/lib/crypto/keys.d.ts +50 -0
- package/dist/lib/crypto/keys.js +89 -0
- package/dist/lib/crypto/keyvaultApi.d.ts +394 -0
- package/dist/lib/crypto/keyvaultApi.js +350 -0
- package/dist/lib/crypto/masterKey.d.ts +59 -0
- package/dist/lib/crypto/masterKey.js +104 -0
- package/dist/lib/crypto/masterKeyWraps.d.ts +108 -0
- package/dist/lib/crypto/masterKeyWraps.js +228 -0
- package/dist/lib/crypto/messageSecurity.d.ts +248 -0
- package/dist/lib/crypto/messageSecurity.js +367 -0
- package/dist/lib/crypto/mime.d.ts +143 -0
- package/dist/lib/crypto/mime.js +504 -0
- package/dist/lib/crypto/passkeyUnlock.d.ts +20 -0
- package/dist/lib/crypto/passkeyUnlock.js +79 -0
- package/dist/lib/crypto/passwordUnlock.d.ts +39 -0
- package/dist/lib/crypto/passwordUnlock.js +73 -0
- package/dist/lib/crypto/recoveryCode.d.ts +28 -0
- package/dist/lib/crypto/recoveryCode.js +86 -0
- package/dist/lib/crypto/signingProviderApi.d.ts +95 -0
- package/dist/lib/crypto/signingProviderApi.js +60 -0
- package/dist/lib/crypto/smime.d.ts +128 -0
- package/dist/lib/crypto/smime.js +402 -0
- package/dist/lib/crypto/smimeMessage.d.ts +132 -0
- package/dist/lib/crypto/smimeMessage.js +341 -0
- package/dist/lib/crypto/useIdleKeyTimeout.d.ts +10 -0
- package/dist/lib/crypto/useIdleKeyTimeout.js +163 -0
- package/dist/lib/crypto/verificationSeal.d.ts +56 -0
- package/dist/lib/crypto/verificationSeal.js +220 -0
- package/dist/lib/mail/compose/composeQuoting.d.ts +88 -0
- package/dist/lib/mail/compose/composeQuoting.js +204 -0
- package/dist/lib/mail/compose/emojiData.d.ts +9 -0
- package/dist/lib/mail/compose/emojiData.js +18 -0
- package/dist/lib/mail/compose/giphyApi.d.ts +17 -0
- package/dist/lib/mail/compose/giphyApi.js +20 -0
- package/dist/lib/mail/conversationsApi.d.ts +80 -0
- package/dist/lib/mail/conversationsApi.js +44 -0
- package/dist/lib/mail/dataExportApi.d.ts +50 -0
- package/dist/lib/mail/dataExportApi.js +40 -0
- package/dist/lib/mail/directoryApi.d.ts +49 -0
- package/dist/lib/mail/directoryApi.js +101 -0
- package/dist/lib/mail/erasureRequestApi.d.ts +45 -0
- package/dist/lib/mail/erasureRequestApi.js +43 -0
- package/dist/lib/mail/flaggedMessages.d.ts +22 -0
- package/dist/lib/mail/flaggedMessages.js +73 -0
- package/dist/lib/mail/focusedInboxOverridesApi.d.ts +37 -0
- package/dist/lib/mail/focusedInboxOverridesApi.js +34 -0
- package/dist/lib/mail/labelsApi.d.ts +47 -0
- package/dist/lib/mail/labelsApi.js +38 -0
- package/dist/lib/mail/mailAddress.d.ts +27 -0
- package/dist/lib/mail/mailAddress.js +54 -0
- package/dist/lib/mail/mailApi.d.ts +850 -0
- package/dist/lib/mail/mailApi.js +602 -0
- package/dist/lib/mail/mailDetailHooks.d.ts +10 -0
- package/dist/lib/mail/mailDetailHooks.js +53 -0
- package/dist/lib/mail/mailFilterRulesApi.d.ts +76 -0
- package/dist/lib/mail/mailFilterRulesApi.js +45 -0
- package/dist/lib/mail/mailSignaturesApi.d.ts +49 -0
- package/dist/lib/mail/mailSignaturesApi.js +42 -0
- package/dist/lib/mail/mailboxAccessApi.d.ts +74 -0
- package/dist/lib/mail/mailboxAccessApi.js +56 -0
- package/dist/lib/mail/mailboxImportApi.d.ts +53 -0
- package/dist/lib/mail/mailboxImportApi.js +51 -0
- package/dist/lib/mail/messageBodySanitizer.d.ts +16 -0
- package/dist/lib/mail/messageBodySanitizer.js +118 -0
- package/dist/lib/mail/pushClient.d.ts +106 -0
- package/dist/lib/mail/pushClient.js +317 -0
- package/dist/lib/mail/sendEvents.d.ts +33 -0
- package/dist/lib/mail/sendEvents.js +44 -0
- package/dist/lib/mail/sendFailure.d.ts +16 -0
- package/dist/lib/mail/sendFailure.js +86 -0
- package/dist/lib/mail/senderListsApi.d.ts +69 -0
- package/dist/lib/mail/senderListsApi.js +126 -0
- package/dist/lib/search/queryGrammar.d.ts +51 -0
- package/dist/lib/search/queryGrammar.js +111 -0
- package/dist/lib/search/searchApi.d.ts +100 -0
- package/dist/lib/search/searchApi.js +107 -0
- package/dist/lib/search/searchScoring.d.ts +34 -0
- package/dist/lib/search/searchScoring.js +44 -0
- package/dist/lib/search/searchTier3.d.ts +64 -0
- package/dist/lib/search/searchTier3.js +335 -0
- package/dist/lib/tasks/tasksApi.d.ts +85 -0
- package/dist/lib/tasks/tasksApi.js +55 -0
- package/dist/lib/util/api.d.ts +160 -0
- package/dist/lib/util/api.js +251 -0
- package/dist/lib/util/apiClientContext.d.ts +7 -0
- package/dist/lib/util/apiClientContext.js +32 -0
- package/dist/lib/util/apiQuery.d.ts +32 -0
- package/dist/lib/util/apiQuery.js +42 -0
- package/dist/lib/util/clipboard.d.ts +7 -0
- package/dist/lib/util/clipboard.js +56 -0
- package/dist/lib/util/dateInput.d.ts +6 -0
- package/dist/lib/util/dateInput.js +14 -0
- package/dist/lib/util/timeZone.d.ts +12 -0
- package/dist/lib/util/timeZone.js +32 -0
- package/dist/lib/util/useCopyToClipboard.d.ts +12 -0
- package/dist/lib/util/useCopyToClipboard.js +34 -0
- package/dist/lib/util/useIsMobile.d.ts +10 -0
- package/dist/lib/util/useIsMobile.js +29 -0
- package/dist/lib/videoconf/videoMeetingsApi.d.ts +116 -0
- package/dist/lib/videoconf/videoMeetingsApi.js +49 -0
- package/lib/admin/auditLogApi.ts +48 -0
- package/lib/admin/distributionListsApi.ts +77 -0
- package/lib/admin/domainsApi.ts +113 -0
- package/lib/admin/escrowAccessRequestsApi.ts +110 -0
- package/lib/admin/escrowAuditLogApi.ts +101 -0
- package/lib/admin/escrowScopesApi.ts +112 -0
- package/lib/admin/leftoverMailboxApi.ts +120 -0
- package/lib/admin/mailboxPolicyApi.ts +38 -0
- package/lib/admin/matterExportApi.ts +62 -0
- package/lib/admin/matterSearchApi.ts +35 -0
- package/lib/admin/mattersApi.ts +86 -0
- package/lib/admin/pluginsApi.ts +339 -0
- package/lib/admin/retentionPolicyApi.ts +46 -0
- package/lib/admin/setupApi.ts +40 -0
- package/lib/admin/transportRulesApi.ts +106 -0
- package/lib/appearance/preferencesApi.ts +335 -0
- package/lib/auth/profileApi.ts +77 -0
- package/lib/auth/session.ts +238 -0
- package/lib/branding/brandingApi.ts +97 -0
- package/lib/branding/useBranding.ts +81 -0
- package/lib/calendar/calendarApi.ts +309 -0
- package/lib/calendar/calendarColors.ts +45 -0
- package/lib/calendar/calendarDragIds.ts +112 -0
- package/lib/calendar/calendarMutations.ts +236 -0
- package/lib/calendar/eventDescription.ts +211 -0
- package/lib/calendar/freeBusyApi.ts +197 -0
- package/lib/calendar/inviteApi.ts +154 -0
- package/lib/calendar/recurrence.ts +285 -0
- package/lib/components/avatar/ContactAvatar.tsx +47 -0
- package/lib/components/buttons/Button.tsx +40 -0
- package/lib/components/buttons/CopyButton.tsx +45 -0
- package/lib/components/feedback/Alert.tsx +13 -0
- package/lib/components/feedback/Skeleton.tsx +38 -0
- package/lib/components/forms/FormField.tsx +23 -0
- package/lib/components/navigation/BottomTabBar.tsx +66 -0
- package/lib/components/overlays/Drawer.tsx +72 -0
- package/lib/components/overlays/Modal.tsx +64 -0
- package/lib/components/overlays/PopoverPortal.tsx +74 -0
- package/lib/components/overlays/overlayStack.ts +165 -0
- package/lib/components/pickers/MiniDatePicker.tsx +90 -0
- package/lib/contacts/contactsApi.ts +289 -0
- package/lib/contacts/vcard.ts +197 -0
- package/lib/crypto/composeSecurity.ts +140 -0
- package/lib/crypto/encoding.ts +36 -0
- package/lib/crypto/escrowKeys.ts +74 -0
- package/lib/crypto/idleTimeout.ts +49 -0
- package/lib/crypto/keySession.ts +483 -0
- package/lib/crypto/keys.ts +105 -0
- package/lib/crypto/keyvaultApi.ts +674 -0
- package/lib/crypto/masterKey.ts +134 -0
- package/lib/crypto/masterKeyWraps.ts +269 -0
- package/lib/crypto/messageSecurity.ts +600 -0
- package/lib/crypto/mime.ts +568 -0
- package/lib/crypto/passkeyUnlock.ts +103 -0
- package/lib/crypto/passwordUnlock.ts +98 -0
- package/lib/crypto/recoveryCode.ts +93 -0
- package/lib/crypto/signingProviderApi.ts +135 -0
- package/lib/crypto/smime.ts +459 -0
- package/lib/crypto/smimeMessage.ts +491 -0
- package/lib/crypto/useIdleKeyTimeout.ts +176 -0
- package/lib/crypto/verificationSeal.ts +288 -0
- package/lib/mail/compose/composeQuoting.ts +243 -0
- package/lib/mail/compose/emojiData.ts +34 -0
- package/lib/mail/compose/giphyApi.ts +31 -0
- package/lib/mail/conversationsApi.ts +123 -0
- package/lib/mail/dataExportApi.ts +73 -0
- package/lib/mail/directoryApi.ts +161 -0
- package/lib/mail/erasureRequestApi.ts +71 -0
- package/lib/mail/flaggedMessages.ts +80 -0
- package/lib/mail/focusedInboxOverridesApi.ts +64 -0
- package/lib/mail/labelsApi.ts +71 -0
- package/lib/mail/mailAddress.ts +76 -0
- package/lib/mail/mailApi.ts +1286 -0
- package/lib/mail/mailDetailHooks.ts +57 -0
- package/lib/mail/mailFilterRulesApi.ts +116 -0
- package/lib/mail/mailSignaturesApi.ts +84 -0
- package/lib/mail/mailboxAccessApi.ts +106 -0
- package/lib/mail/mailboxImportApi.ts +87 -0
- package/lib/mail/messageBodySanitizer.ts +129 -0
- package/lib/mail/pushClient.ts +375 -0
- package/lib/mail/sendEvents.ts +72 -0
- package/lib/mail/sendFailure.ts +98 -0
- package/lib/mail/senderListsApi.ts +161 -0
- package/lib/search/queryGrammar.ts +179 -0
- package/lib/search/searchApi.ts +199 -0
- package/lib/search/searchScoring.ts +46 -0
- package/lib/search/searchTier3.ts +406 -0
- package/lib/tasks/tasksApi.ts +128 -0
- package/lib/util/api.ts +318 -0
- package/lib/util/apiClientContext.ts +35 -0
- package/lib/util/apiQuery.ts +61 -0
- package/lib/util/clipboard.ts +55 -0
- package/lib/util/dateInput.ts +15 -0
- package/lib/util/timeZone.ts +33 -0
- package/lib/util/useCopyToClipboard.ts +48 -0
- package/lib/util/useIsMobile.ts +34 -0
- package/lib/videoconf/videoMeetingsApi.ts +144 -0
- package/package.json +10 -4
package/dist/apps/www/index.js
CHANGED
|
@@ -10,17 +10,18 @@ import { prefetchComposeWindow } from "../shared/components/mail/compose/Compose
|
|
|
10
10
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
11
11
|
import { createPortal } from "react-dom";
|
|
12
12
|
import { HiOutlineFlag, HiOutlineLockClosed, HiOutlinePaperClip } from "react-icons/hi2";
|
|
13
|
-
import { ApiRequestError } from "
|
|
14
|
-
import { archiveMessage, bulkUpdateMessages, createFolder, getMessage, getMessageRawContent, listFolders, listMessages, moveMessages, setMessagesFlagged, } from "
|
|
15
|
-
import { listLabels } from "
|
|
16
|
-
import { listConversationMessages, listConversations, } from "
|
|
17
|
-
import { search as searchMailbox } from "
|
|
18
|
-
import {
|
|
13
|
+
import { ApiRequestError } from "../../lib/util/api.js";
|
|
14
|
+
import { archiveMessage, bulkUpdateMessages, createFolder, getMessage, getMessageRawContent, listFolders, listMessages, moveMessages, setMessagesFlagged, } from "../../lib/mail/mailApi.js";
|
|
15
|
+
import { listLabels } from "../../lib/mail/labelsApi.js";
|
|
16
|
+
import { listConversationMessages, listConversations, } from "../../lib/mail/conversationsApi.js";
|
|
17
|
+
import { search as searchMailbox } from "../../lib/search/searchApi.js";
|
|
18
|
+
import { useApiClient } from "../../lib/util/apiClientContext.js";
|
|
19
|
+
import { parseSearchQuery } from "../../lib/search/queryGrammar.js";
|
|
19
20
|
import { searchLocalIndex } from "../shared/search/searchTier2.js";
|
|
20
21
|
import { SEARCH_LIMITS, classifyFailure, describeFailures, hitKey, mergeSearchResults, runLimited, searchPageSize, tagHits, withTimeout, } from "../shared/search/crossMailboxSearch.js";
|
|
21
|
-
import { getUnlockedKeys, subscribeKeySession } from "
|
|
22
|
-
import { useMessageAttachments } from "
|
|
23
|
-
import useIsMobile from "
|
|
22
|
+
import { getUnlockedKeys, subscribeKeySession } from "../../lib/crypto/keySession.js";
|
|
23
|
+
import { useMessageAttachments } from "../../lib/mail/mailDetailHooks.js";
|
|
24
|
+
import useIsMobile from "../../lib/util/useIsMobile.js";
|
|
24
25
|
import MailShell, { useMailShell, } from "../shared/components/mail/layout/MailShell.js";
|
|
25
26
|
import MailAddress from "../shared/components/mail/MailAddress.js";
|
|
26
27
|
import OutboxRowStatus from "../shared/components/mail/OutboxRowStatus.js";
|
|
@@ -43,8 +44,8 @@ import { EMPTIABLE_FOLDER_TYPES } from "../shared/mail/permanentDelete.js";
|
|
|
43
44
|
import { usePermanentDelete } from "../shared/mail/usePermanentDelete.js";
|
|
44
45
|
import { useMailboxUpdateAccess } from "../shared/mail/useMailboxUpdateAccess.js";
|
|
45
46
|
import { CONVERSATION_SORT_NOTE, CONVERSATION_SORT_UNAVAILABLE, MAIL_LIST_CLASSIFICATION_FILTERS, getMailListPreferences, setMailListPreferences, sortConversations, } from "../shared/components/mail/listPreferences.js";
|
|
46
|
-
import Alert from "
|
|
47
|
-
import Skeleton, { SkeletonList } from "
|
|
47
|
+
import Alert from "../../lib/components/feedback/Alert.js";
|
|
48
|
+
import Skeleton, { SkeletonList } from "../../lib/components/feedback/Skeleton.js";
|
|
48
49
|
import { useUnlockPrompt } from "../shared/components/layout/UnlockPromptProvider.js";
|
|
49
50
|
import { SHORTCUTS } from "../shared/keyboard/keymap.js";
|
|
50
51
|
import { isActivatable } from "../shared/keyboard/targets.js";
|
|
@@ -94,7 +95,7 @@ async function decryptEncryptedRows(messages, unlocked) {
|
|
|
94
95
|
const rawMime = await getMessageRawContent(message.uid);
|
|
95
96
|
// Loaded here, on first use: the S/MIME code (PKI.js, ASN.1, X.509) is over half a megabyte and an inbox with
|
|
96
97
|
// no encrypted mail in it never needs it.
|
|
97
|
-
const { evaluateMessageSecurity } = await (securityModule ?? (securityModule = import("
|
|
98
|
+
const { evaluateMessageSecurity } = await (securityModule ?? (securityModule = import("../../lib/crypto/messageSecurity.js")));
|
|
98
99
|
const security = await evaluateMessageSecurity(rawMime, unlocked);
|
|
99
100
|
if (!security.subject && !security.html) {
|
|
100
101
|
return null;
|
|
@@ -242,10 +243,10 @@ function mailboxesWithMore(cursor) {
|
|
|
242
243
|
* (deleted after being indexed, or the fetch itself failed) is cached as `null` and dropped - the same
|
|
243
244
|
* "a search hit can briefly outlive the message it points to" tolerance this function's inline
|
|
244
245
|
* predecessor already had. */
|
|
245
|
-
async function resolveHitsToMessages(hits, cache) {
|
|
246
|
+
async function resolveHitsToMessages(hits, cache, client) {
|
|
246
247
|
const toFetch = hits.filter((hit) => !cache.has(hit.entityUid));
|
|
247
248
|
await Promise.all(toFetch.map(async (hit) => {
|
|
248
|
-
const message = await getMessage(hit.entityUid).catch(() => null);
|
|
249
|
+
const message = await getMessage(hit.entityUid, client).catch(() => null);
|
|
249
250
|
cache.set(hit.entityUid, message);
|
|
250
251
|
}));
|
|
251
252
|
const messages = [];
|
|
@@ -334,7 +335,7 @@ function mergeInboxMessages(perMailbox) {
|
|
|
334
335
|
* composite-cursor "load more" per mailbox is a natural v2 if usage shows people scrolling past the first
|
|
335
336
|
* page in aggregate view often.
|
|
336
337
|
*/
|
|
337
|
-
async function fetchAggregateMessages(mailboxFolders, type, filter) {
|
|
338
|
+
async function fetchAggregateMessages(mailboxFolders, type, filter, client) {
|
|
338
339
|
const perMailbox = await Promise.all(mailboxFolders.map(async ({ mailbox, folders }) => {
|
|
339
340
|
const folder = folders.find((f) => f.type === type);
|
|
340
341
|
if (!folder) {
|
|
@@ -344,7 +345,7 @@ async function fetchAggregateMessages(mailboxFolders, type, filter) {
|
|
|
344
345
|
// this function's own pagination scope trim) - each mailbox contributes its own newest page and
|
|
345
346
|
// they're merged newest-first, which a different sort key couldn't be made honest across an
|
|
346
347
|
// arbitrary number of independently-paged folders.
|
|
347
|
-
const messages = await listMessages(folder.uid, { limit: MESSAGE_PAGE_SIZE, filter }).catch(() => []);
|
|
348
|
+
const messages = await listMessages(folder.uid, { limit: MESSAGE_PAGE_SIZE, filter }, client).catch(() => []);
|
|
348
349
|
return { mailbox, messages };
|
|
349
350
|
}));
|
|
350
351
|
return mergeInboxMessages(perMailbox);
|
|
@@ -355,13 +356,13 @@ async function fetchAggregateMessages(mailboxFolders, type, filter) {
|
|
|
355
356
|
* grouping pulls in) and each row tagged with its mailbox, then merged newest activity first. Same first-page-only scope, and the same
|
|
356
357
|
* rule that a mailbox that has no such folder or fails to answer contributes nothing rather than blanking the rest.
|
|
357
358
|
*/
|
|
358
|
-
async function fetchAggregateConversations(mailboxFolders, type, params) {
|
|
359
|
+
async function fetchAggregateConversations(mailboxFolders, type, params, client) {
|
|
359
360
|
const perMailbox = await Promise.all(mailboxFolders.map(async ({ mailbox, folders }) => {
|
|
360
361
|
const folder = folders.find((f) => f.type === type);
|
|
361
362
|
if (!folder) {
|
|
362
363
|
return [];
|
|
363
364
|
}
|
|
364
|
-
const rows = await listConversations(mailbox.uid, { ...params, folderUid: folder.uid, page: 0 }).catch(() => []);
|
|
365
|
+
const rows = await listConversations(mailbox.uid, { ...params, folderUid: folder.uid, page: 0 }, client).catch(() => []);
|
|
365
366
|
return rows.map((row) => ({ ...row, mailboxUid: mailbox.uid }));
|
|
366
367
|
}));
|
|
367
368
|
return perMailbox.flat().sort((a, b) => Date.parse(b.latestDate) - Date.parse(a.latestDate));
|
|
@@ -390,6 +391,7 @@ function InboxContent({ userUid }) {
|
|
|
390
391
|
const isMobile = useIsMobile();
|
|
391
392
|
const navigate = useNavigate();
|
|
392
393
|
const { requestUnlock } = useUnlockPrompt();
|
|
394
|
+
const client = useApiClient();
|
|
393
395
|
const [messages, setMessages] = useState([]);
|
|
394
396
|
const [conversations, setConversations] = useState([]);
|
|
395
397
|
const [loading, setLoading] = useState(true);
|
|
@@ -748,7 +750,7 @@ function InboxContent({ userUid }) {
|
|
|
748
750
|
}
|
|
749
751
|
let cancelled = false;
|
|
750
752
|
setOtherMailboxLabels([]);
|
|
751
|
-
listLabels(labelsMailboxUid, { limit: 200 })
|
|
753
|
+
listLabels(labelsMailboxUid, { limit: 200 }, client)
|
|
752
754
|
.then((result) => {
|
|
753
755
|
if (!cancelled) {
|
|
754
756
|
setOtherMailboxLabels(result);
|
|
@@ -758,11 +760,11 @@ function InboxContent({ userUid }) {
|
|
|
758
760
|
return () => {
|
|
759
761
|
cancelled = true;
|
|
760
762
|
};
|
|
761
|
-
}, [labelsMailboxUid, otherMailbox]);
|
|
763
|
+
}, [labelsMailboxUid, otherMailbox, client]);
|
|
762
764
|
useEffect(() => {
|
|
763
765
|
let cancelled = false;
|
|
764
766
|
setMailboxLabels([]);
|
|
765
|
-
listLabels(activeMailboxUid, { limit: 200 })
|
|
767
|
+
listLabels(activeMailboxUid, { limit: 200 }, client)
|
|
766
768
|
.then((result) => {
|
|
767
769
|
if (!cancelled) {
|
|
768
770
|
setMailboxLabels(result);
|
|
@@ -772,7 +774,7 @@ function InboxContent({ userUid }) {
|
|
|
772
774
|
return () => {
|
|
773
775
|
cancelled = true;
|
|
774
776
|
};
|
|
775
|
-
}, [activeMailboxUid]);
|
|
777
|
+
}, [activeMailboxUid, client]);
|
|
776
778
|
// Debounce the raw input into the query actually searched, so every keystroke doesn't fire a request.
|
|
777
779
|
useEffect(() => {
|
|
778
780
|
const handle = setTimeout(() => setSearchQuery(searchInput.trim()), SEARCH_DEBOUNCE_MS);
|
|
@@ -884,7 +886,7 @@ function InboxContent({ userUid }) {
|
|
|
884
886
|
setLoading(true);
|
|
885
887
|
setError(null);
|
|
886
888
|
setHasMore(false);
|
|
887
|
-
void fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0))
|
|
889
|
+
void fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0), client)
|
|
888
890
|
.then((results) => {
|
|
889
891
|
if (isCurrentRun()) {
|
|
890
892
|
setConversations(results);
|
|
@@ -912,7 +914,7 @@ function InboxContent({ userUid }) {
|
|
|
912
914
|
setLoading(true);
|
|
913
915
|
}
|
|
914
916
|
setError(null);
|
|
915
|
-
listConversations(activeMailboxUid, conversationParams(0))
|
|
917
|
+
listConversations(activeMailboxUid, conversationParams(0), client)
|
|
916
918
|
.then((result) => {
|
|
917
919
|
if (isCurrentRun()) {
|
|
918
920
|
shownListKeyRef.current = listKey;
|
|
@@ -945,7 +947,7 @@ function InboxContent({ userUid }) {
|
|
|
945
947
|
setLoading(true);
|
|
946
948
|
setError(null);
|
|
947
949
|
// hasMore stays false (set above) - see fetchAggregateMessages()'s own pagination scope trim.
|
|
948
|
-
void fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter)
|
|
950
|
+
void fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter, client)
|
|
949
951
|
.then((results) => {
|
|
950
952
|
if (isCurrentRun()) {
|
|
951
953
|
setMessages(results);
|
|
@@ -979,7 +981,7 @@ function InboxContent({ userUid }) {
|
|
|
979
981
|
const isSuperseded = () => searchRunIdRef.current !== myRunId;
|
|
980
982
|
// Tier 3's code, imported when the first mailbox needs it and shared by the rest.
|
|
981
983
|
let tier3Module;
|
|
982
|
-
const loadTier3 = () => (tier3Module ?? (tier3Module = import("
|
|
984
|
+
const loadTier3 = () => (tier3Module ?? (tier3Module = import("../../lib/search/searchTier3.js")));
|
|
983
985
|
const failures = [];
|
|
984
986
|
/** The failed mailbox's notice entry. A search of one mailbox has none: its failure fails the search. */
|
|
985
987
|
const noteFailure = (uid, encrypted, err) => {
|
|
@@ -1021,7 +1023,7 @@ function InboxContent({ userUid }) {
|
|
|
1021
1023
|
const isUnconfirmed = (hit) => !!hit.metadataOnly && !confirmed.has(hitKey(hit));
|
|
1022
1024
|
const effectiveTier1 = capped.filter((hit) => !runs.get(hit.mailboxUid).tier3Settled || !isUnconfirmed(hit));
|
|
1023
1025
|
const merged = mergeSearchResults(effectiveTier1, tier2Hits, tier3Hits).slice(0, rowCap);
|
|
1024
|
-
const { messages: resolved, snippets: resolvedSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current);
|
|
1026
|
+
const { messages: resolved, snippets: resolvedSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current, client);
|
|
1025
1027
|
if (isSuperseded() || revealId < revealsApplied) {
|
|
1026
1028
|
return;
|
|
1027
1029
|
}
|
|
@@ -1047,7 +1049,7 @@ function InboxContent({ userUid }) {
|
|
|
1047
1049
|
const run = runs.get(uid);
|
|
1048
1050
|
try {
|
|
1049
1051
|
const [tier1Page, tier2Page] = await Promise.all([
|
|
1050
|
-
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, undefined, uid, pageSize)), tier1TimeoutMs),
|
|
1052
|
+
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, undefined, uid, pageSize), client), tier1TimeoutMs),
|
|
1051
1053
|
searchLocalIndex(uid, parsed, run.unlocked, pageSize, 0),
|
|
1052
1054
|
]);
|
|
1053
1055
|
if (isSuperseded()) {
|
|
@@ -1156,7 +1158,7 @@ function InboxContent({ userUid }) {
|
|
|
1156
1158
|
shownListKeyRef.current = listKey;
|
|
1157
1159
|
pendingScrollRef.current = snapshot.scrollTop;
|
|
1158
1160
|
}
|
|
1159
|
-
listMessages(folderUid, listParams)
|
|
1161
|
+
listMessages(folderUid, listParams, client)
|
|
1160
1162
|
.then((results) => {
|
|
1161
1163
|
if (isCurrentRun()) {
|
|
1162
1164
|
shownListKeyRef.current = listKey;
|
|
@@ -1213,6 +1215,7 @@ function InboxContent({ userUid }) {
|
|
|
1213
1215
|
crossMailbox,
|
|
1214
1216
|
searchTargetKey,
|
|
1215
1217
|
activeMailboxUid,
|
|
1218
|
+
client,
|
|
1216
1219
|
]);
|
|
1217
1220
|
// Which folders the messages on screen live in: one the sidebar does not know (the Outbox and Sent Items are made by the server on first use) is looked for -
|
|
1218
1221
|
// its mailbox's folders are listed again, once - so it appears without a reload. A conversation names every folder it has a message in.
|
|
@@ -1246,13 +1249,13 @@ function InboxContent({ userUid }) {
|
|
|
1246
1249
|
try {
|
|
1247
1250
|
if (asConversations && aggregateFolderType) {
|
|
1248
1251
|
// No paging here either: the fresh merged first pages are the list.
|
|
1249
|
-
const fresh = await fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0));
|
|
1252
|
+
const fresh = await fetchAggregateConversations(mailboxFolders, aggregateFolderType, conversationParams(0), client);
|
|
1250
1253
|
if (isCurrent()) {
|
|
1251
1254
|
setConversations(fresh);
|
|
1252
1255
|
}
|
|
1253
1256
|
}
|
|
1254
1257
|
else if (asConversations) {
|
|
1255
|
-
const fresh = await listConversations(activeMailboxUid, conversationParams(0));
|
|
1258
|
+
const fresh = await listConversations(activeMailboxUid, conversationParams(0), client);
|
|
1256
1259
|
if (!isCurrent()) {
|
|
1257
1260
|
return;
|
|
1258
1261
|
}
|
|
@@ -1263,13 +1266,13 @@ function InboxContent({ userUid }) {
|
|
|
1263
1266
|
}
|
|
1264
1267
|
else if (aggregateFolderType) {
|
|
1265
1268
|
// No paging here (see `fetchAggregateMessages()`): the fresh merged first pages are the list.
|
|
1266
|
-
const fresh = await fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter);
|
|
1269
|
+
const fresh = await fetchAggregateMessages(mailboxFolders, aggregateFolderType, effectiveFilter, client);
|
|
1267
1270
|
if (isCurrent()) {
|
|
1268
1271
|
setMessages(fresh);
|
|
1269
1272
|
}
|
|
1270
1273
|
}
|
|
1271
1274
|
else {
|
|
1272
|
-
const fresh = await listMessages(folderUid, listParams);
|
|
1275
|
+
const fresh = await listMessages(folderUid, listParams, client);
|
|
1273
1276
|
if (!isCurrent()) {
|
|
1274
1277
|
return;
|
|
1275
1278
|
}
|
|
@@ -1340,7 +1343,7 @@ function InboxContent({ userUid }) {
|
|
|
1340
1343
|
try {
|
|
1341
1344
|
if (asConversations) {
|
|
1342
1345
|
const page = Math.floor(listedOffsetRef.current / MESSAGE_PAGE_SIZE);
|
|
1343
|
-
const more = await listConversations(activeMailboxUid, conversationParams(page));
|
|
1346
|
+
const more = await listConversations(activeMailboxUid, conversationParams(page), client);
|
|
1344
1347
|
if (!isCurrentRun()) {
|
|
1345
1348
|
return;
|
|
1346
1349
|
}
|
|
@@ -1362,7 +1365,7 @@ function InboxContent({ userUid }) {
|
|
|
1362
1365
|
const mailboxCursor = cursor.perMailbox.get(uid);
|
|
1363
1366
|
try {
|
|
1364
1367
|
const [tier1Page, tier2Page] = await Promise.all([
|
|
1365
|
-
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, mailboxCursor.tier1Cursor, uid, cursor.pageSize)), tier1TimeoutMs),
|
|
1368
|
+
withTimeout(searchMailbox(parsed.text, tier1SearchParams(parsed, mailboxCursor.tier1Cursor, uid, cursor.pageSize), client), tier1TimeoutMs),
|
|
1366
1369
|
searchLocalIndex(uid, parsed, getUnlockedKeys(uid), cursor.pageSize, mailboxCursor.tier2Offset),
|
|
1367
1370
|
]);
|
|
1368
1371
|
// The first page cached this pass under `tier3Key` before it created the cursor - unless Tier 3 had nothing to give.
|
|
@@ -1405,7 +1408,7 @@ function InboxContent({ userUid }) {
|
|
|
1405
1408
|
// confirms simply keeps showing its existing placeholder text rather than a live skeleton
|
|
1406
1409
|
// - a deliberate, documented scope trim of progressive reveal to the first page only.
|
|
1407
1410
|
const merged = mergeSearchResults(capSkeletons(answered.flatMap((page) => page.tier1)), answered.flatMap((page) => page.tier2), answered.flatMap((page) => page.tier3));
|
|
1408
|
-
const { messages: more, snippets: moreSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current);
|
|
1411
|
+
const { messages: more, snippets: moreSnippets } = await resolveHitsToMessages(merged, resolvedMessageCacheRef.current, client);
|
|
1409
1412
|
if (!isCurrentRun()) {
|
|
1410
1413
|
return;
|
|
1411
1414
|
}
|
|
@@ -1443,7 +1446,7 @@ function InboxContent({ userUid }) {
|
|
|
1443
1446
|
// no longer a page boundary, so this page overlaps rows already shown - `appendUnseenRows()`
|
|
1444
1447
|
// drops those - rather than skipping the message that shifted back across the boundary.
|
|
1445
1448
|
const page = Math.floor(listedOffsetRef.current / MESSAGE_PAGE_SIZE);
|
|
1446
|
-
const more = await listMessages(folderUid, { ...listParams, page });
|
|
1449
|
+
const more = await listMessages(folderUid, { ...listParams, page }, client);
|
|
1447
1450
|
if (!isCurrentRun()) {
|
|
1448
1451
|
return;
|
|
1449
1452
|
}
|
|
@@ -1479,6 +1482,7 @@ function InboxContent({ userUid }) {
|
|
|
1479
1482
|
activeMailboxUid,
|
|
1480
1483
|
crossMailbox,
|
|
1481
1484
|
searchTargetKey,
|
|
1485
|
+
client,
|
|
1482
1486
|
]);
|
|
1483
1487
|
// Always calls the latest `loadMore` closure so the effect below doesn't need `loadMore` itself in its
|
|
1484
1488
|
// dependency array (it changes on every keystroke/page load, which would otherwise mean nothing here).
|
|
@@ -1623,7 +1627,7 @@ function InboxContent({ userUid }) {
|
|
|
1623
1627
|
}
|
|
1624
1628
|
setResolvingSelection((n) => n + 1);
|
|
1625
1629
|
try {
|
|
1626
|
-
const loaded = await Promise.all(missing.map(async (id) => [id, await listConversationMessages(activeMailboxUid, id)]));
|
|
1630
|
+
const loaded = await Promise.all(missing.map(async (id) => [id, await listConversationMessages(activeMailboxUid, id, {}, client)]));
|
|
1627
1631
|
setConversationMessagesById((prev) => ({ ...prev, ...Object.fromEntries(loaded) }));
|
|
1628
1632
|
}
|
|
1629
1633
|
catch (err) {
|
|
@@ -1726,11 +1730,11 @@ function InboxContent({ userUid }) {
|
|
|
1726
1730
|
return inEachMailbox(chosen, async (ofMailbox, group) => {
|
|
1727
1731
|
const archiveFolderUid = foldersOf(ofMailbox).find((f) => f.type === "archive")?.uid;
|
|
1728
1732
|
if (archiveFolderUid) {
|
|
1729
|
-
return moveMessages(group, archiveFolderUid);
|
|
1733
|
+
return moveMessages(group, archiveFolderUid, client);
|
|
1730
1734
|
}
|
|
1731
|
-
const first = await archiveMessage(group[0].uid);
|
|
1735
|
+
const first = await archiveMessage(group[0].uid, client);
|
|
1732
1736
|
const rest = group.slice(1);
|
|
1733
|
-
return rest.length === 0 ? [first] : [first, ...(await moveMessages(rest, first.folderUid))];
|
|
1737
|
+
return rest.length === 0 ? [first] : [first, ...(await moveMessages(rest, first.folderUid, client))];
|
|
1734
1738
|
});
|
|
1735
1739
|
}
|
|
1736
1740
|
/**
|
|
@@ -1760,19 +1764,19 @@ function InboxContent({ userUid }) {
|
|
|
1760
1764
|
if (known) {
|
|
1761
1765
|
return known;
|
|
1762
1766
|
}
|
|
1763
|
-
const listed = (await listFolders(ofMailbox)).find((f) => f.type === type);
|
|
1767
|
+
const listed = (await listFolders(ofMailbox, client)).find((f) => f.type === type);
|
|
1764
1768
|
if (listed) {
|
|
1765
1769
|
onFolderCreated(listed);
|
|
1766
1770
|
lazyFoldersRef.current.set(key, listed.uid);
|
|
1767
1771
|
return listed.uid;
|
|
1768
1772
|
}
|
|
1769
|
-
const created = await createFolder({ mailboxUid: ofMailbox, name, type });
|
|
1773
|
+
const created = await createFolder({ mailboxUid: ofMailbox, name, type }, client);
|
|
1770
1774
|
lazyFoldersRef.current.set(key, created.uid);
|
|
1771
1775
|
return created.uid;
|
|
1772
1776
|
}
|
|
1773
1777
|
/** Moves `chosen` into each of its mailbox's own folder of `type` (Deleted Items, Junk), making it where the server has none yet. */
|
|
1774
1778
|
function moveToFolderOfType(chosen, type, name) {
|
|
1775
|
-
return inEachMailbox(chosen, async (ofMailbox, group) => moveMessages(group, await resolveFolderOfType(type, name, ofMailbox)));
|
|
1779
|
+
return inEachMailbox(chosen, async (ofMailbox, group) => moveMessages(group, await resolveFolderOfType(type, name, ofMailbox), client));
|
|
1776
1780
|
}
|
|
1777
1781
|
/**
|
|
1778
1782
|
* Sets every selected message's labels in one bulk update: each ends up with `labelUids`, plus the
|
|
@@ -1786,7 +1790,7 @@ function InboxContent({ userUid }) {
|
|
|
1786
1790
|
void runBulkAction((chosen) => bulkUpdateMessages(chosen.map((message) => {
|
|
1787
1791
|
const kept = (message.labelUids ?? []).filter((uid) => keepPartial.includes(uid) || !mailboxLabels.some((label) => label.uid === uid));
|
|
1788
1792
|
return { uid: message.uid, version: message.version, labelUids: [...new Set([...labelUids, ...kept])] };
|
|
1789
|
-
})), false);
|
|
1793
|
+
}), client), false);
|
|
1790
1794
|
}
|
|
1791
1795
|
function moveSelectionToType(type, name, chosen) {
|
|
1792
1796
|
return runBulkAction((moving) => moveToFolderOfType(moving, type, name), true, chosen);
|
|
@@ -1871,7 +1875,7 @@ function InboxContent({ userUid }) {
|
|
|
1871
1875
|
setMoveDialog(null);
|
|
1872
1876
|
return;
|
|
1873
1877
|
}
|
|
1874
|
-
await runBulkAction((moving) => moveMessages(moving, folderUidToMoveTo), true, chosen);
|
|
1878
|
+
await runBulkAction((moving) => moveMessages(moving, folderUidToMoveTo, client), true, chosen);
|
|
1875
1879
|
setMoveDialog(null);
|
|
1876
1880
|
}
|
|
1877
1881
|
const loadMoreStatus = loadingMore ? ("Loading more\u2026") : loadMoreError ? (_jsxs("span", { className: "inline-flex items-center gap-2", children: [_jsx("span", { role: "alert", className: "text-danger", children: loadMoreError }), _jsx("button", { type: "button", onClick: () => void loadMoreRef.current(), className: "text-primary-dark hover:underline font-medium", children: "Retry" })] })) : loadMoreStalled ? (_jsx("button", { type: "button", onClick: () => void loadMoreRef.current(), className: "text-primary-dark hover:underline font-medium", children: "Load more" })) : null;
|
|
@@ -2009,7 +2013,7 @@ function InboxContent({ userUid }) {
|
|
|
2009
2013
|
const cacheKey = ofMailbox === activeMailboxUid ? id : `${ofMailbox}\u0000${id}`;
|
|
2010
2014
|
let all = conversationMessagesById[cacheKey];
|
|
2011
2015
|
if (!all) {
|
|
2012
|
-
all = await listConversationMessages(ofMailbox, id);
|
|
2016
|
+
all = await listConversationMessages(ofMailbox, id, {}, client);
|
|
2013
2017
|
const loaded = all;
|
|
2014
2018
|
setConversationMessagesById((prev) => ({ ...prev, [cacheKey]: loaded }));
|
|
2015
2019
|
}
|
|
@@ -2081,7 +2085,7 @@ function InboxContent({ userUid }) {
|
|
|
2081
2085
|
useShortcut(SHORTCUTS.mail.markUnread, () => void runOnKeyboardTargets((chosen) => setReadStateMany(chosen, false, { patch: patchListedMessage, track: trackMessageChange }), false, (message) => !isUnread(message)), { enabled: keyboardActions && keyboardTargetExists });
|
|
2082
2086
|
useShortcut(SHORTCUTS.mail.flag, () =>
|
|
2083
2087
|
// Flags them all unless every one already is - what the bar's Flag and Unflag would do on this selection.
|
|
2084
|
-
void runOnKeyboardTargets((chosen) => setMessagesFlagged(chosen, !chosen.every((m) => m.flags.flagged)), false), { enabled: keyboardActions && keyboardTargetExists });
|
|
2088
|
+
void runOnKeyboardTargets((chosen) => setMessagesFlagged(chosen, !chosen.every((m) => m.flags.flagged), client), false), { enabled: keyboardActions && keyboardTargetExists });
|
|
2085
2089
|
useShortcut(SHORTCUTS.mail.open, (event) => {
|
|
2086
2090
|
// Enter on a row that is not selected yet is the row button's own click (it selects). On the selected one - or with the focus
|
|
2087
2091
|
// elsewhere - it opens the message on its own page, as it does in Outlook.
|
|
@@ -2146,8 +2150,8 @@ function InboxContent({ userUid }) {
|
|
|
2146
2150
|
? selectAllConversations()
|
|
2147
2151
|
: setSelectedUids(new Set(messages.map((m) => m.uid))), onClearSelection: () => asConversations ? setSelectedConversationIds(new Set()) : setSelectedUids(new Set()), onCancel: leaveSelectMode, folders: foldersOf(selectionMailboxUid), currentFolderUid: folderUid, labels: mailboxLabels, mailboxUid: selectionMailboxUid, moveDisabledReason: moveDisabledReason, labelsDisabledReason: labelsDisabledReason, onLabelCreated: (label) => setMailboxLabels((prev) => [...prev, label]), onFolderCreated: onFolderCreated, onApplyLabels: applyLabelsToSelection, onSetRead: (read) => void runBulkAction(
|
|
2148
2152
|
// Optimistic: the rows and the folder badges change now, and change back if the server refuses.
|
|
2149
|
-
(chosen) => setReadStateMany(chosen, read, { patch: patchListedMessage, track: trackMessageChange }), false), onSetFlagged: (flagged) => void runBulkAction((chosen) => setMessagesFlagged(chosen, flagged), false), shortcuts: keyboardActions, onArchive: () => void runBulkAction(bulkArchive, true), onMoveTo: async (targetFolderUid) => {
|
|
2150
|
-
await runBulkAction((chosen) => moveMessages(chosen, targetFolderUid), true);
|
|
2153
|
+
(chosen) => setReadStateMany(chosen, read, { patch: patchListedMessage, track: trackMessageChange }), false), onSetFlagged: (flagged) => void runBulkAction((chosen) => setMessagesFlagged(chosen, flagged, client), false), shortcuts: keyboardActions, onArchive: () => void runBulkAction(bulkArchive, true), onMoveTo: async (targetFolderUid) => {
|
|
2154
|
+
await runBulkAction((chosen) => moveMessages(chosen, targetFolderUid, client), true);
|
|
2151
2155
|
}, onReportJunk: () => void moveSelectionToType("junk", "Junk Email"), onDelete: () => void (deletesPermanently
|
|
2152
2156
|
? purgeChosen(selectedMessages)
|
|
2153
2157
|
: // A mix (search results from several folders) moves only what is not in Deleted Items yet.
|
|
@@ -14,5 +14,5 @@ declare function MessageDetailPage(props: MailShellProps & {
|
|
|
14
14
|
export default MessageDetailPage;
|
|
15
15
|
/** The tab's title: `Brand: Mail` (see `pageTitle()`). */
|
|
16
16
|
export declare const title: (props: {
|
|
17
|
-
branding?: Pick<import("
|
|
17
|
+
branding?: Pick<import("../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
18
18
|
}) => string;
|
|
@@ -5,16 +5,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { getMessage } from "
|
|
10
|
-
import { listLabels } from "
|
|
11
|
-
import { useMessageAttachments } from "
|
|
8
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
9
|
+
import { getMessage } from "../../../lib/mail/mailApi.js";
|
|
10
|
+
import { listLabels } from "../../../lib/mail/labelsApi.js";
|
|
11
|
+
import { useMessageAttachments } from "../../../lib/mail/mailDetailHooks.js";
|
|
12
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
12
13
|
import { useMarkMessageRead } from "../../shared/mail/useMarkMessageRead.js";
|
|
13
14
|
import MailShell, { useMailShell } from "../../shared/components/mail/layout/MailShell.js";
|
|
14
15
|
import { LazyConversationThreadPane, LazyMessageDetailPane } from "../../shared/components/mail/LazyReadingPane.js";
|
|
15
16
|
import { useSearchParams } from "@rapidrest/react/client";
|
|
16
17
|
import { ReadingPaneSkeleton } from "../../shared/components/mail/reading/MessageCard.js";
|
|
17
|
-
import Alert from "
|
|
18
|
+
import Alert from "../../../lib/components/feedback/Alert.js";
|
|
18
19
|
/**
|
|
19
20
|
* Only reached on mobile (below the `md` breakpoint) — desktop's `apps/www/index.tsx` keeps its existing
|
|
20
21
|
* inline reading pane and never navigates here; see that file's `handleSelect`. A row of the conversation list
|
|
@@ -26,6 +27,7 @@ function MessageDetailPage(props) {
|
|
|
26
27
|
}
|
|
27
28
|
function MessageDetailContent({ uid }) {
|
|
28
29
|
const { mailboxFolders, mailboxUid, onFolderCreated } = useMailShell();
|
|
30
|
+
const client = useApiClient();
|
|
29
31
|
const [message, setMessage] = useState(null);
|
|
30
32
|
const [loading, setLoading] = useState(true);
|
|
31
33
|
const [error, setError] = useState(null);
|
|
@@ -34,11 +36,11 @@ function MessageDetailContent({ uid }) {
|
|
|
34
36
|
useEffect(() => {
|
|
35
37
|
setLoading(true);
|
|
36
38
|
setError(null);
|
|
37
|
-
getMessage(uid)
|
|
39
|
+
getMessage(uid, client)
|
|
38
40
|
.then(setMessage)
|
|
39
41
|
.catch((err) => setError(err instanceof ApiRequestError ? err.message : "Could not load this message."))
|
|
40
42
|
.finally(() => setLoading(false));
|
|
41
|
-
}, [uid]);
|
|
43
|
+
}, [uid, client]);
|
|
42
44
|
// See `apps/www/index.tsx`'s identical effect's own doc comment - a failure here just hides the
|
|
43
45
|
// Labels control rather than blocking the rest of the page. Keyed on the message's own mailbox, not the
|
|
44
46
|
// shell's ambient one: this route is reached from aggregate/search rows too, where they can differ.
|
|
@@ -48,7 +50,7 @@ function MessageDetailContent({ uid }) {
|
|
|
48
50
|
return;
|
|
49
51
|
}
|
|
50
52
|
let cancelled = false;
|
|
51
|
-
listLabels(messageMailboxUid, { limit: 200 })
|
|
53
|
+
listLabels(messageMailboxUid, { limit: 200 }, client)
|
|
52
54
|
.then((result) => {
|
|
53
55
|
if (!cancelled) {
|
|
54
56
|
setLabels(result);
|
|
@@ -58,7 +60,7 @@ function MessageDetailContent({ uid }) {
|
|
|
58
60
|
return () => {
|
|
59
61
|
cancelled = true;
|
|
60
62
|
};
|
|
61
|
-
}, [messageMailboxUid]);
|
|
63
|
+
}, [messageMailboxUid, client]);
|
|
62
64
|
// A thread loads, marks read and fetches the attachments of each message it opens itself.
|
|
63
65
|
const attachments = useMessageAttachments(conversationId ? null : message);
|
|
64
66
|
useMarkMessageRead(conversationId ? null : message, setMessage);
|
|
@@ -6,5 +6,5 @@ declare function SettingsAppearancePage(props: SettingsAppearancePageProps): Rea
|
|
|
6
6
|
export default SettingsAppearancePage;
|
|
7
7
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
8
8
|
export declare const title: (props: {
|
|
9
|
-
branding?: Pick<import("
|
|
9
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
10
10
|
}) => string;
|
|
@@ -5,5 +5,5 @@ declare function SettingsAutoReplyPage(props: SettingsAutoReplyPageProps): React
|
|
|
5
5
|
export default SettingsAutoReplyPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,10 +5,11 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useState } from "react";
|
|
8
|
-
import { toDatetimeLocal } from "
|
|
9
|
-
import { updateMailbox } from "
|
|
8
|
+
import { toDatetimeLocal } from "../../../../lib/util/dateInput.js";
|
|
9
|
+
import { updateMailbox } from "../../../../lib/mail/mailApi.js";
|
|
10
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
10
11
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
11
|
-
import Button from "
|
|
12
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
12
13
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
13
14
|
const INPUT_CLASS = "w-full text-sm py-2 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
14
15
|
function SettingsAutoReplyPage(props) {
|
|
@@ -20,6 +21,7 @@ function AutoReplyContent() {
|
|
|
20
21
|
// resolved to one of them (a mailbox-less caller sees `MailboxProvisioning` instead) — this lookup
|
|
21
22
|
// can't miss, same established non-null pattern as `apps/www/contacts/index.tsx`'s `mailboxUid!`.
|
|
22
23
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid);
|
|
24
|
+
const client = useApiClient();
|
|
23
25
|
const [oofEnabled, setOofEnabled] = useState(mailbox.oofEnabled ?? false);
|
|
24
26
|
const [oofMessage, setOofMessage] = useState(mailbox.oofMessage ?? "");
|
|
25
27
|
const [oofStartTime, setOofStartTime] = useState(mailbox.oofStartTime ? toDatetimeLocal(mailbox.oofStartTime) : "");
|
|
@@ -42,7 +44,7 @@ function AutoReplyContent() {
|
|
|
42
44
|
// `null` (not omitted) clears a previously saved window - an omitted field is left as-is.
|
|
43
45
|
oofStartTime: oofStartTime ? new Date(oofStartTime).toISOString() : null,
|
|
44
46
|
oofEndTime: oofEndTime ? new Date(oofEndTime).toISOString() : null,
|
|
45
|
-
});
|
|
47
|
+
}, client);
|
|
46
48
|
setVersion(updated.version);
|
|
47
49
|
setSaved(true);
|
|
48
50
|
}
|
|
@@ -5,5 +5,5 @@ declare function SettingsBlockedSendersPage(props: SettingsBlockedSendersPagePro
|
|
|
5
5
|
export default SettingsBlockedSendersPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,10 +5,11 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useId, useRef, useState } from "react";
|
|
8
|
-
import { blockedSendersOf, isSharedWithMe, safeSendersOf } from "
|
|
9
|
-
import { MAX_SENDER_LIST_ENTRIES, addBlockedSender, addSafeSender, checkSenderEntry, removeBlockedSender, removeSafeSender, } from "
|
|
8
|
+
import { blockedSendersOf, isSharedWithMe, safeSendersOf } from "../../../../lib/mail/mailApi.js";
|
|
9
|
+
import { MAX_SENDER_LIST_ENTRIES, addBlockedSender, addSafeSender, checkSenderEntry, removeBlockedSender, removeSafeSender, } from "../../../../lib/mail/senderListsApi.js";
|
|
10
10
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
11
|
-
import Button from "
|
|
11
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
12
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
12
13
|
import { useMailboxUpdateAccess } from "../../../shared/mail/useMailboxUpdateAccess.js";
|
|
13
14
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
14
15
|
function SettingsBlockedSendersPage(props) {
|
|
@@ -105,6 +106,7 @@ function ListsContent() {
|
|
|
105
106
|
// `SettingsShell` only ever renders its children once `mailboxes` has loaded and `mailboxUid` has resolved to one of them - same established
|
|
106
107
|
// non-null pattern as `apps/www/settings/read-receipts/index.tsx`.
|
|
107
108
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid);
|
|
109
|
+
const client = useApiClient();
|
|
108
110
|
const writable = useMailboxUpdateAccess(mailbox);
|
|
109
111
|
// The lists are the owner's (and a manager's) to change; the server does not say which of the two a delegate is, so one who may update is offered the
|
|
110
112
|
// forms and told what a refusal means.
|
|
@@ -127,7 +129,7 @@ function ListsContent() {
|
|
|
127
129
|
return undefined;
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
|
-
return (_jsx("div", { className: "flex-1 min-w-0 overflow-y-auto p-4 sm:p-6", children: _jsxs("div", { className: "max-w-4xl", children: [_jsx("h1", { className: "text-lg font-bold tracking-tight mb-1", children: "Blocked and safe senders" }), _jsxs("p", { className: "text-sm text-text-muted mb-4", children: ["These lists belong to ", _jsx("span", { className: "font-medium text-text", children: mailbox.displayName }), " (", mailbox.primarySmtpAddress, "). Each entry is an email address or a domain. An entry is on one list at a time: adding it to one takes it off the other."] }), !supported ? (_jsx("p", { role: "status", className: "text-sm text-text-muted", children: "This server does not support blocked and safe senders yet." })) : (_jsxs(_Fragment, { children: [!writable && (_jsx("p", { role: "status", className: "text-sm rounded-md border border-border bg-surface-alt px-3 py-2 mb-4", children: "You have view-only access to this mailbox, so you can see these lists but not change them." })), writable && delegated && (_jsx("p", { className: "text-sm text-text-muted mb-4", children: "Only this mailbox\u2019s owner, or someone with full access to it, can change these lists. If you cannot, the server says so when you try." })), _jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsx(ListSection, { kind: "blocked", entries: blocked, otherEntries: safe, ownAddresses: ownAddresses, editable: writable, onAdd: (entry) => change(() => addBlockedSender(mailbox.uid, entry), "Couldn't block this sender"), onRemove: (entry) => change(() => removeBlockedSender(mailbox.uid, entry), "Couldn't unblock this sender") }), _jsx(ListSection, { kind: "safe", entries: safe, otherEntries: blocked, ownAddresses: ownAddresses, editable: writable, onAdd: (entry) => change(() => addSafeSender(mailbox.uid, entry), "Couldn't add this safe sender"), onRemove: (entry) => change(() => removeSafeSender(mailbox.uid, entry), "Couldn't remove this safe sender") })] })] }))] }) }));
|
|
132
|
+
return (_jsx("div", { className: "flex-1 min-w-0 overflow-y-auto p-4 sm:p-6", children: _jsxs("div", { className: "max-w-4xl", children: [_jsx("h1", { className: "text-lg font-bold tracking-tight mb-1", children: "Blocked and safe senders" }), _jsxs("p", { className: "text-sm text-text-muted mb-4", children: ["These lists belong to ", _jsx("span", { className: "font-medium text-text", children: mailbox.displayName }), " (", mailbox.primarySmtpAddress, "). Each entry is an email address or a domain. An entry is on one list at a time: adding it to one takes it off the other."] }), !supported ? (_jsx("p", { role: "status", className: "text-sm text-text-muted", children: "This server does not support blocked and safe senders yet." })) : (_jsxs(_Fragment, { children: [!writable && (_jsx("p", { role: "status", className: "text-sm rounded-md border border-border bg-surface-alt px-3 py-2 mb-4", children: "You have view-only access to this mailbox, so you can see these lists but not change them." })), writable && delegated && (_jsx("p", { className: "text-sm text-text-muted mb-4", children: "Only this mailbox\u2019s owner, or someone with full access to it, can change these lists. If you cannot, the server says so when you try." })), _jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsx(ListSection, { kind: "blocked", entries: blocked, otherEntries: safe, ownAddresses: ownAddresses, editable: writable, onAdd: (entry) => change(() => addBlockedSender(mailbox.uid, entry, client), "Couldn't block this sender"), onRemove: (entry) => change(() => removeBlockedSender(mailbox.uid, entry, client), "Couldn't unblock this sender") }), _jsx(ListSection, { kind: "safe", entries: safe, otherEntries: blocked, ownAddresses: ownAddresses, editable: writable, onAdd: (entry) => change(() => addSafeSender(mailbox.uid, entry, client), "Couldn't add this safe sender"), onRemove: (entry) => change(() => removeSafeSender(mailbox.uid, entry, client), "Couldn't remove this safe sender") })] })] }))] }) }));
|
|
131
133
|
}
|
|
132
134
|
export default SettingsBlockedSendersPage;
|
|
133
135
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
@@ -8,5 +8,5 @@ declare function SettingsEncryptionPage(props: SettingsEncryptionPageProps): Rea
|
|
|
8
8
|
export default SettingsEncryptionPage;
|
|
9
9
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
10
10
|
export declare const title: (props: {
|
|
11
|
-
branding?: Pick<import("
|
|
11
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
12
12
|
}) => string;
|