@remit/web-client 0.0.324 → 0.0.326
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/dist/harness/index.html +50 -0
- package/dist/harness/vite-preset.d.ts +10 -0
- package/dist/harness/vite-preset.js +151 -0
- package/dist/spellcheck/languages.d.ts +33 -0
- package/dist/spellcheck/languages.js +66 -0
- package/dist/spellcheck/vite-plugin.d.ts +43 -0
- package/dist/spellcheck/vite-plugin.js +294 -0
- package/dist/spellcheck/worker-stub.d.ts +15 -0
- package/dist/spellcheck/worker-stub.js +33 -0
- package/dist/src/auth/AccountMenu.d.ts +1 -0
- package/dist/src/auth/AccountMenu.js +4 -0
- package/dist/src/auth/AccountSession.d.ts +14 -0
- package/dist/src/auth/AccountSession.js +12 -0
- package/dist/src/auth/BetterAuthShell.d.ts +18 -0
- package/dist/src/auth/BetterAuthShell.js +88 -0
- package/dist/src/auth/SessionRateLimited.d.ts +12 -0
- package/dist/src/auth/SessionRateLimited.js +10 -0
- package/dist/src/auth/SignInAgain.d.ts +1 -0
- package/dist/src/auth/SignInAgain.js +6 -0
- package/dist/src/auth/account-menu-mode.d.ts +13 -0
- package/dist/src/auth/account-menu-mode.js +15 -0
- package/dist/src/auth/amplify-config.d.ts +9 -0
- package/dist/src/auth/amplify-config.js +43 -0
- package/dist/src/auth/auth-error.d.ts +42 -0
- package/dist/src/auth/auth-error.js +81 -0
- package/dist/src/auth/auth-interceptor.d.ts +12 -0
- package/dist/src/auth/auth-interceptor.js +24 -0
- package/dist/src/auth/better-auth/BetterAuthAccount.d.ts +7 -0
- package/dist/src/auth/better-auth/BetterAuthAccount.js +18 -0
- package/dist/src/auth/better-auth-config.d.ts +43 -0
- package/dist/src/auth/better-auth-config.js +215 -0
- package/dist/src/auth/better-auth-provider.d.ts +7 -0
- package/dist/src/auth/better-auth-provider.js +15 -0
- package/dist/src/auth/cognito/CognitoAccount.d.ts +8 -0
- package/dist/src/auth/cognito/CognitoAccount.js +32 -0
- package/dist/src/auth/cognito/CognitoShell.d.ts +6 -0
- package/dist/src/auth/cognito/CognitoShell.js +204 -0
- package/dist/src/auth/cognito/cognito-token.d.ts +9 -0
- package/dist/src/auth/cognito/cognito-token.js +36 -0
- package/dist/src/auth/cognito-provider.d.ts +8 -0
- package/dist/src/auth/cognito-provider.js +17 -0
- package/dist/src/auth/combined-provider.d.ts +2 -0
- package/dist/src/auth/combined-provider.js +27 -0
- package/dist/src/auth/provider.d.ts +51 -0
- package/dist/src/auth/provider.js +18 -0
- package/dist/src/auth/session-state.d.ts +29 -0
- package/dist/src/auth/session-state.js +16 -0
- package/dist/src/auth/sign-out-visibility.d.ts +5 -0
- package/dist/src/auth/sign-out-visibility.js +1 -0
- package/dist/src/components/calendar/AgendaStrip.d.ts +64 -0
- package/dist/src/components/calendar/AgendaStrip.js +19 -0
- package/dist/src/components/calendar/AgendaView.d.ts +42 -0
- package/dist/src/components/calendar/AgendaView.js +131 -0
- package/dist/src/components/calendar/CalendarComposePane.d.ts +49 -0
- package/dist/src/components/calendar/CalendarComposePane.js +8 -0
- package/dist/src/components/calendar/CalendarComposeSeed.d.ts +7 -0
- package/dist/src/components/calendar/CalendarComposeSeed.js +19 -0
- package/dist/src/components/calendar/CalendarEventPane.d.ts +48 -0
- package/dist/src/components/calendar/CalendarEventPane.js +48 -0
- package/dist/src/components/calendar/CalendarShell.d.ts +43 -0
- package/dist/src/components/calendar/CalendarShell.js +35 -0
- package/dist/src/components/calendar/CalendarUnavailable.d.ts +13 -0
- package/dist/src/components/calendar/CalendarUnavailable.js +24 -0
- package/dist/src/components/calendar/CalendarViewPlaceholder.d.ts +1 -0
- package/dist/src/components/calendar/CalendarViewPlaceholder.js +5 -0
- package/dist/src/components/calendar/CalendarWaiting.d.ts +25 -0
- package/dist/src/components/calendar/CalendarWaiting.js +14 -0
- package/dist/src/components/calendar/CalendarWorkspace.d.ts +49 -0
- package/dist/src/components/calendar/CalendarWorkspace.js +65 -0
- package/dist/src/components/calendar/ChangeCalendarSuggestion.d.ts +5 -0
- package/dist/src/components/calendar/ChangeCalendarSuggestion.js +66 -0
- package/dist/src/components/calendar/OpenCalendarEvent.d.ts +20 -0
- package/dist/src/components/calendar/OpenCalendarEvent.js +169 -0
- package/dist/src/components/calendar/PendingSuggestions.d.ts +9 -0
- package/dist/src/components/calendar/PendingSuggestions.js +50 -0
- package/dist/src/components/calendar/WriteCalendarEvent.d.ts +13 -0
- package/dist/src/components/calendar/WriteCalendarEvent.js +59 -0
- package/dist/src/components/calendar/calendar-story-fixtures.d.ts +21 -0
- package/dist/src/components/calendar/calendar-story-fixtures.js +95 -0
- package/dist/src/components/calendar/calendar-story-server.d.ts +37 -0
- package/dist/src/components/calendar/calendar-story-server.js +108 -0
- package/dist/src/components/compose/AddressField.d.ts +13 -0
- package/dist/src/components/compose/AddressField.js +23 -0
- package/dist/src/components/compose/ComposeForm.d.ts +31 -0
- package/dist/src/components/compose/ComposeForm.js +925 -0
- package/dist/src/components/compose/ComposeProvider.d.ts +38 -0
- package/dist/src/components/compose/ComposeProvider.js +101 -0
- package/dist/src/components/compose/ComposeSmtpMissingBanner.d.ts +8 -0
- package/dist/src/components/compose/ComposeSmtpMissingBanner.js +10 -0
- package/dist/src/components/compose/ConversationCompose.d.ts +17 -0
- package/dist/src/components/compose/ConversationCompose.js +46 -0
- package/dist/src/components/compose/FromSelector.d.ts +7 -0
- package/dist/src/components/compose/FromSelector.js +29 -0
- package/dist/src/components/compose/FullCompose.d.ts +6 -0
- package/dist/src/components/compose/FullCompose.js +38 -0
- package/dist/src/components/compose/MobileComposeSheet.d.ts +1 -0
- package/dist/src/components/compose/MobileComposeSheet.js +65 -0
- package/dist/src/components/compose/compose-spellcheck.d.ts +17 -0
- package/dist/src/components/compose/compose-spellcheck.js +43 -0
- package/dist/src/components/compose/compose-title.d.ts +9 -0
- package/dist/src/components/compose/compose-title.js +9 -0
- package/dist/src/components/compose/mail-sync-off-refusal.d.ts +1 -0
- package/dist/src/components/compose/mail-sync-off-refusal.js +7 -0
- package/dist/src/components/compose/quoted-message.d.ts +59 -0
- package/dist/src/components/compose/quoted-message.js +162 -0
- package/dist/src/components/compose/reply-with-times.d.ts +6 -0
- package/dist/src/components/compose/reply-with-times.js +12 -0
- package/dist/src/components/config-import/ConfigImportWizard.d.ts +24 -0
- package/dist/src/components/config-import/ConfigImportWizard.js +425 -0
- package/dist/src/components/config-import/config-import.fixtures.d.ts +27 -0
- package/dist/src/components/config-import/config-import.fixtures.js +167 -0
- package/dist/src/components/config-import/steps.d.ts +100 -0
- package/dist/src/components/config-import/steps.js +143 -0
- package/dist/src/components/layout/AppShellSkeleton.d.ts +9 -0
- package/dist/src/components/layout/AppShellSkeleton.js +12 -0
- package/dist/src/components/layout/ComposeFab.d.ts +12 -0
- package/dist/src/components/layout/ComposeFab.js +21 -0
- package/dist/src/components/layout/Drawer.d.ts +28 -0
- package/dist/src/components/layout/Drawer.js +37 -0
- package/dist/src/components/layout/MailShell.d.ts +51 -0
- package/dist/src/components/layout/MailShell.js +39 -0
- package/dist/src/components/layout/MailTopBar.d.ts +14 -0
- package/dist/src/components/layout/MailTopBar.js +44 -0
- package/dist/src/components/mail/AuthenticityBanner.d.ts +14 -0
- package/dist/src/components/mail/AuthenticityBanner.js +18 -0
- package/dist/src/components/mail/AutoMovedIndicator.d.ts +20 -0
- package/dist/src/components/mail/AutoMovedIndicator.js +25 -0
- package/dist/src/components/mail/BlockedImagesNotice.d.ts +17 -0
- package/dist/src/components/mail/BlockedImagesNotice.js +8 -0
- package/dist/src/components/mail/BriefPane.d.ts +33 -0
- package/dist/src/components/mail/BriefPane.js +255 -0
- package/dist/src/components/mail/BulkRunProvider.d.ts +90 -0
- package/dist/src/components/mail/BulkRunProvider.js +203 -0
- package/dist/src/components/mail/ConversationView.d.ts +52 -0
- package/dist/src/components/mail/ConversationView.js +279 -0
- package/dist/src/components/mail/DailyBrief.d.ts +46 -0
- package/dist/src/components/mail/DailyBrief.js +584 -0
- package/dist/src/components/mail/DeleteConfirmDialog.d.ts +25 -0
- package/dist/src/components/mail/DeleteConfirmDialog.js +70 -0
- package/dist/src/components/mail/DraftsView.d.ts +15 -0
- package/dist/src/components/mail/DraftsView.js +84 -0
- package/dist/src/components/mail/EmptyTrashBar.d.ts +47 -0
- package/dist/src/components/mail/EmptyTrashBar.js +73 -0
- package/dist/src/components/mail/FlaggedList.d.ts +20 -0
- package/dist/src/components/mail/FlaggedList.js +173 -0
- package/dist/src/components/mail/FlaggedPane.d.ts +29 -0
- package/dist/src/components/mail/FlaggedPane.js +225 -0
- package/dist/src/components/mail/IntelligenceDrawer.d.ts +19 -0
- package/dist/src/components/mail/IntelligenceDrawer.js +16 -0
- package/dist/src/components/mail/IntelligencePane.d.ts +59 -0
- package/dist/src/components/mail/IntelligencePane.js +130 -0
- package/dist/src/components/mail/LabelApplyTrigger.d.ts +15 -0
- package/dist/src/components/mail/LabelApplyTrigger.js +29 -0
- package/dist/src/components/mail/MailListHeader.d.ts +102 -0
- package/dist/src/components/mail/MailListHeader.js +303 -0
- package/dist/src/components/mail/MailNav.d.ts +17 -0
- package/dist/src/components/mail/MailNav.js +20 -0
- package/dist/src/components/mail/MailSidebarAdapter.d.ts +23 -0
- package/dist/src/components/mail/MailSidebarAdapter.js +161 -0
- package/dist/src/components/mail/MailViewChrome.d.ts +54 -0
- package/dist/src/components/mail/MailViewChrome.js +43 -0
- package/dist/src/components/mail/MailboxPane.d.ts +36 -0
- package/dist/src/components/mail/MailboxPane.js +705 -0
- package/dist/src/components/mail/MessageActionMenu.d.ts +36 -0
- package/dist/src/components/mail/MessageActionMenu.js +129 -0
- package/dist/src/components/mail/MessageAttachments.d.ts +21 -0
- package/dist/src/components/mail/MessageAttachments.js +96 -0
- package/dist/src/components/mail/MessageBody.d.ts +72 -0
- package/dist/src/components/mail/MessageBody.js +68 -0
- package/dist/src/components/mail/MessageBodyErrorBanner.d.ts +20 -0
- package/dist/src/components/mail/MessageBodyErrorBanner.js +29 -0
- package/dist/src/components/mail/MessageCard.d.ts +29 -0
- package/dist/src/components/mail/MessageCard.js +77 -0
- package/dist/src/components/mail/MessageList.d.ts +130 -0
- package/dist/src/components/mail/MessageList.js +896 -0
- package/dist/src/components/mail/MessageListItem.d.ts +32 -0
- package/dist/src/components/mail/MessageListItem.js +41 -0
- package/dist/src/components/mail/MessageRow.d.ts +57 -0
- package/dist/src/components/mail/MessageRow.js +137 -0
- package/dist/src/components/mail/MessageSettlementAlert.d.ts +27 -0
- package/dist/src/components/mail/MessageSettlementAlert.js +79 -0
- package/dist/src/components/mail/MessageToolbar.d.ts +58 -0
- package/dist/src/components/mail/MessageToolbar.js +80 -0
- package/dist/src/components/mail/MobileMessageBar.d.ts +25 -0
- package/dist/src/components/mail/MobileMessageBar.js +61 -0
- package/dist/src/components/mail/MoveToTrigger.d.ts +30 -0
- package/dist/src/components/mail/MoveToTrigger.js +114 -0
- package/dist/src/components/mail/NavMenuButton.d.ts +1 -0
- package/dist/src/components/mail/NavMenuButton.js +17 -0
- package/dist/src/components/mail/OutboxPane.d.ts +27 -0
- package/dist/src/components/mail/OutboxPane.js +247 -0
- package/dist/src/components/mail/PullToRefresh.d.ts +12 -0
- package/dist/src/components/mail/PullToRefresh.js +12 -0
- package/dist/src/components/mail/RawMessageView.d.ts +18 -0
- package/dist/src/components/mail/RawMessageView.js +30 -0
- package/dist/src/components/mail/RoleAppointmentPromptProvider.d.ts +39 -0
- package/dist/src/components/mail/RoleAppointmentPromptProvider.js +137 -0
- package/dist/src/components/mail/SelectionWizardHost.d.ts +110 -0
- package/dist/src/components/mail/SelectionWizardHost.js +721 -0
- package/dist/src/components/mail/SpamRescue.d.ts +17 -0
- package/dist/src/components/mail/SpamRescue.js +64 -0
- package/dist/src/components/mail/SwipeableMessageRow.d.ts +31 -0
- package/dist/src/components/mail/SwipeableMessageRow.js +69 -0
- package/dist/src/components/mail/ThreadListInteraction.d.ts +106 -0
- package/dist/src/components/mail/ThreadListInteraction.js +319 -0
- package/dist/src/components/mail/bulk-run-state.d.ts +37 -0
- package/dist/src/components/mail/bulk-run-state.js +64 -0
- package/dist/src/components/mail/intelligence-story-calendar.d.ts +7 -0
- package/dist/src/components/mail/intelligence-story-calendar.js +17 -0
- package/dist/src/components/mail/message-body-error-banner-content.d.ts +31 -0
- package/dist/src/components/mail/message-body-error-banner-content.js +70 -0
- package/dist/src/components/mail/organize-run-state.d.ts +26 -0
- package/dist/src/components/mail/organize-run-state.js +24 -0
- package/dist/src/components/mail/selection-wizard-run-controls.d.ts +66 -0
- package/dist/src/components/mail/selection-wizard-run-controls.js +65 -0
- package/dist/src/components/mail/useModifierSelect.d.ts +35 -0
- package/dist/src/components/mail/useModifierSelect.js +75 -0
- package/dist/src/components/onboarding/OnboardingWizard.d.ts +83 -0
- package/dist/src/components/onboarding/OnboardingWizard.js +661 -0
- package/dist/src/components/onboarding/credential-steps.d.ts +58 -0
- package/dist/src/components/onboarding/credential-steps.js +198 -0
- package/dist/src/components/self-update/SelfUpdateOverlay.d.ts +1 -0
- package/dist/src/components/self-update/SelfUpdateOverlay.js +25 -0
- package/dist/src/components/settings/AccountFormPanel.d.ts +29 -0
- package/dist/src/components/settings/AccountFormPanel.js +337 -0
- package/dist/src/components/settings/AccountServices.d.ts +6 -0
- package/dist/src/components/settings/AccountServices.js +100 -0
- package/dist/src/components/settings/AccountServicesCard.d.ts +16 -0
- package/dist/src/components/settings/AccountServicesCard.js +13 -0
- package/dist/src/components/settings/AdvancedNavIcon.d.ts +1 -0
- package/dist/src/components/settings/AdvancedNavIcon.js +17 -0
- package/dist/src/components/settings/CalendarCreateCard.d.ts +12 -0
- package/dist/src/components/settings/CalendarCreateCard.js +42 -0
- package/dist/src/components/settings/CalendarDetailsForm.d.ts +15 -0
- package/dist/src/components/settings/CalendarDetailsForm.js +34 -0
- package/dist/src/components/settings/CalendarFeedCard.d.ts +18 -0
- package/dist/src/components/settings/CalendarFeedCard.js +58 -0
- package/dist/src/components/settings/CalendarFeedPanel.d.ts +13 -0
- package/dist/src/components/settings/CalendarFeedPanel.js +7 -0
- package/dist/src/components/settings/CalendarSettingsPanel.d.ts +13 -0
- package/dist/src/components/settings/CalendarSettingsPanel.js +21 -0
- package/dist/src/components/settings/CalendarSubscribeCard.d.ts +11 -0
- package/dist/src/components/settings/CalendarSubscribeCard.js +30 -0
- package/dist/src/components/settings/CalendarSubscriptionStatus.d.ts +12 -0
- package/dist/src/components/settings/CalendarSubscriptionStatus.js +20 -0
- package/dist/src/components/settings/ConfigExportCard.d.ts +18 -0
- package/dist/src/components/settings/ConfigExportCard.js +16 -0
- package/dist/src/components/settings/ConfigTransferPanel.d.ts +15 -0
- package/dist/src/components/settings/ConfigTransferPanel.js +55 -0
- package/dist/src/components/settings/DangerZone.d.ts +1 -0
- package/dist/src/components/settings/DangerZone.js +8 -0
- package/dist/src/components/settings/DeleteAccountDialog.d.ts +13 -0
- package/dist/src/components/settings/DeleteAccountDialog.js +62 -0
- package/dist/src/components/settings/DeleteFolderDialog.d.ts +21 -0
- package/dist/src/components/settings/DeleteFolderDialog.js +116 -0
- package/dist/src/components/settings/FilterActionError.d.ts +8 -0
- package/dist/src/components/settings/FilterActionError.js +10 -0
- package/dist/src/components/settings/FilterEditor.d.ts +22 -0
- package/dist/src/components/settings/FilterEditor.js +143 -0
- package/dist/src/components/settings/FilterEditorSurface.d.ts +18 -0
- package/dist/src/components/settings/FilterEditorSurface.js +18 -0
- package/dist/src/components/settings/FiltersList.d.ts +31 -0
- package/dist/src/components/settings/FiltersList.js +58 -0
- package/dist/src/components/settings/LabelsList.d.ts +15 -0
- package/dist/src/components/settings/LabelsList.js +37 -0
- package/dist/src/components/settings/SelfUpdatePanel.d.ts +1 -0
- package/dist/src/components/settings/SelfUpdatePanel.js +19 -0
- package/dist/src/components/settings/TimeZoneSelect.d.ts +12 -0
- package/dist/src/components/settings/TimeZoneSelect.js +10 -0
- package/dist/src/components/settings/TlsRootCaDownload.d.ts +1 -0
- package/dist/src/components/settings/TlsRootCaDownload.js +15 -0
- package/dist/src/components/settings/WarningsNavIcon.d.ts +1 -0
- package/dist/src/components/settings/WarningsNavIcon.js +8 -0
- package/dist/src/components/settings/WarningsPanel.d.ts +21 -0
- package/dist/src/components/settings/WarningsPanel.js +93 -0
- package/dist/src/components/settings/account-form-helpers.d.ts +53 -0
- package/dist/src/components/settings/account-form-helpers.js +78 -0
- package/dist/src/components/ui/AppVersion.d.ts +12 -0
- package/dist/src/components/ui/AppVersion.js +19 -0
- package/dist/src/components/ui/BugReportButton.d.ts +6 -0
- package/dist/src/components/ui/BugReportButton.js +11 -0
- package/dist/src/components/ui/ErrorBannerProvider.d.ts +27 -0
- package/dist/src/components/ui/ErrorBannerProvider.js +82 -0
- package/dist/src/components/ui/FatalErrorOverlay.d.ts +31 -0
- package/dist/src/components/ui/FatalErrorOverlay.js +71 -0
- package/dist/src/components/ui/error-banners.d.ts +43 -0
- package/dist/src/components/ui/error-banners.js +69 -0
- package/dist/src/components/ui/folder-role-refusal.d.ts +29 -0
- package/dist/src/components/ui/folder-role-refusal.js +44 -0
- package/dist/src/components/ui/placement-refusal.d.ts +31 -0
- package/dist/src/components/ui/placement-refusal.js +39 -0
- package/dist/src/hooks/calendar/agenda-window.d.ts +110 -0
- package/dist/src/hooks/calendar/agenda-window.js +159 -0
- package/dist/src/hooks/calendar/draft.d.ts +59 -0
- package/dist/src/hooks/calendar/draft.js +142 -0
- package/dist/src/hooks/calendar/index.d.ts +24 -0
- package/dist/src/hooks/calendar/index.js +24 -0
- package/dist/src/hooks/calendar/instance.d.ts +61 -0
- package/dist/src/hooks/calendar/instance.js +145 -0
- package/dist/src/hooks/calendar/recurrence-rule.d.ts +29 -0
- package/dist/src/hooks/calendar/recurrence-rule.js +159 -0
- package/dist/src/hooks/calendar/resource.d.ts +14 -0
- package/dist/src/hooks/calendar/resource.js +87 -0
- package/dist/src/hooks/calendar/selection.d.ts +38 -0
- package/dist/src/hooks/calendar/selection.js +54 -0
- package/dist/src/hooks/calendar/suggestion-draft.d.ts +11 -0
- package/dist/src/hooks/calendar/suggestion-draft.js +45 -0
- package/dist/src/hooks/calendar/useCalendarCollectionWrites.d.ts +26 -0
- package/dist/src/hooks/calendar/useCalendarCollectionWrites.js +75 -0
- package/dist/src/hooks/calendar/useCalendarEvent.d.ts +8 -0
- package/dist/src/hooks/calendar/useCalendarEvent.js +32 -0
- package/dist/src/hooks/calendar/useCalendarEvents.d.ts +58 -0
- package/dist/src/hooks/calendar/useCalendarEvents.js +128 -0
- package/dist/src/hooks/calendar/useCalendarFeed.d.ts +29 -0
- package/dist/src/hooks/calendar/useCalendarFeed.js +115 -0
- package/dist/src/hooks/calendar/useCalendarFreeBusy.d.ts +15 -0
- package/dist/src/hooks/calendar/useCalendarFreeBusy.js +61 -0
- package/dist/src/hooks/calendar/useCalendarJump.d.ts +24 -0
- package/dist/src/hooks/calendar/useCalendarJump.js +95 -0
- package/dist/src/hooks/calendar/useCalendarSubscriptions.d.ts +17 -0
- package/dist/src/hooks/calendar/useCalendarSubscriptions.js +66 -0
- package/dist/src/hooks/calendar/useCalendarSuggestions.d.ts +45 -0
- package/dist/src/hooks/calendar/useCalendarSuggestions.js +171 -0
- package/dist/src/hooks/calendar/useCalendarWrites.d.ts +44 -0
- package/dist/src/hooks/calendar/useCalendarWrites.js +109 -0
- package/dist/src/hooks/calendar/useCalendars.d.ts +20 -0
- package/dist/src/hooks/calendar/useCalendars.js +30 -0
- package/dist/src/hooks/calendar/useDraftClashes.d.ts +15 -0
- package/dist/src/hooks/calendar/useDraftClashes.js +68 -0
- package/dist/src/hooks/calendar/window.d.ts +57 -0
- package/dist/src/hooks/calendar/window.js +135 -0
- package/dist/src/hooks/queries/keys.d.ts +5 -0
- package/dist/src/hooks/queries/keys.js +5 -0
- package/dist/src/hooks/use-system-update.d.ts +40 -0
- package/dist/src/hooks/use-system-update.js +237 -0
- package/dist/src/hooks/useApplyLabel.d.ts +17 -0
- package/dist/src/hooks/useApplyLabel.js +41 -0
- package/dist/src/hooks/useArchiveMailbox.d.ts +74 -0
- package/dist/src/hooks/useArchiveMailbox.js +120 -0
- package/dist/src/hooks/useAutoMovedBadge.d.ts +56 -0
- package/dist/src/hooks/useAutoMovedBadge.js +86 -0
- package/dist/src/hooks/useBriefSections.d.ts +70 -0
- package/dist/src/hooks/useBriefSections.js +210 -0
- package/dist/src/hooks/useCalendarData.d.ts +37 -0
- package/dist/src/hooks/useCalendarData.js +23 -0
- package/dist/src/hooks/useClauseSuggestions.d.ts +14 -0
- package/dist/src/hooks/useClauseSuggestions.js +39 -0
- package/dist/src/hooks/useComposeAttachments.d.ts +20 -0
- package/dist/src/hooks/useComposeAttachments.js +72 -0
- package/dist/src/hooks/useComposeLanguages.d.ts +11 -0
- package/dist/src/hooks/useComposeLanguages.js +44 -0
- package/dist/src/hooks/useCreateMailbox.d.ts +40 -0
- package/dist/src/hooks/useCreateMailbox.js +123 -0
- package/dist/src/hooks/useCurrentMailboxName.d.ts +39 -0
- package/dist/src/hooks/useCurrentMailboxName.js +109 -0
- package/dist/src/hooks/useDebouncedValue.d.ts +1 -0
- package/dist/src/hooks/useDebouncedValue.js +9 -0
- package/dist/src/hooks/useDeleteFolder.d.ts +36 -0
- package/dist/src/hooks/useDeleteFolder.js +280 -0
- package/dist/src/hooks/useDeleteMessages.d.ts +41 -0
- package/dist/src/hooks/useDeleteMessages.js +171 -0
- package/dist/src/hooks/useDeleteOutcome.d.ts +14 -0
- package/dist/src/hooks/useDeleteOutcome.js +46 -0
- package/dist/src/hooks/useEmptyTrash.d.ts +16 -0
- package/dist/src/hooks/useEmptyTrash.js +130 -0
- package/dist/src/hooks/useEscalatedActions.d.ts +83 -0
- package/dist/src/hooks/useEscalatedActions.js +175 -0
- package/dist/src/hooks/useFilters.d.ts +57 -0
- package/dist/src/hooks/useFilters.js +147 -0
- package/dist/src/hooks/useFolderLabelTranslator.d.ts +6 -0
- package/dist/src/hooks/useFolderLabelTranslator.js +11 -0
- package/dist/src/hooks/useFollowFocusOpen.d.ts +28 -0
- package/dist/src/hooks/useFollowFocusOpen.js +52 -0
- package/dist/src/hooks/useInitialSyncProgress.d.ts +41 -0
- package/dist/src/hooks/useInitialSyncProgress.js +111 -0
- package/dist/src/hooks/useInlineImages.d.ts +16 -0
- package/dist/src/hooks/useInlineImages.js +52 -0
- package/dist/src/hooks/useIntelligenceCalendar.d.ts +20 -0
- package/dist/src/hooks/useIntelligenceCalendar.js +230 -0
- package/dist/src/hooks/useIntelligenceData.d.ts +58 -0
- package/dist/src/hooks/useIntelligenceData.js +242 -0
- package/dist/src/hooks/useIntelligenceDrawer.d.ts +21 -0
- package/dist/src/hooks/useIntelligenceDrawer.js +22 -0
- package/dist/src/hooks/useIntelligenceSurface.d.ts +44 -0
- package/dist/src/hooks/useIntelligenceSurface.js +57 -0
- package/dist/src/hooks/useIsDark.d.ts +8 -0
- package/dist/src/hooks/useIsDark.js +21 -0
- package/dist/src/hooks/useKeyboardNavigation.d.ts +57 -0
- package/dist/src/hooks/useKeyboardNavigation.js +61 -0
- package/dist/src/hooks/useLabels.d.ts +40 -0
- package/dist/src/hooks/useLabels.js +98 -0
- package/dist/src/hooks/useLayoutTier.d.ts +33 -0
- package/dist/src/hooks/useLayoutTier.js +33 -0
- package/dist/src/hooks/useMailboxAccount.d.ts +18 -0
- package/dist/src/hooks/useMailboxAccount.js +48 -0
- package/dist/src/hooks/useMailboxNameIndex.d.ts +2 -0
- package/dist/src/hooks/useMailboxNameIndex.js +21 -0
- package/dist/src/hooks/useMarkAsRead.d.ts +59 -0
- package/dist/src/hooks/useMarkAsRead.js +206 -0
- package/dist/src/hooks/useMatchSample.d.ts +30 -0
- package/dist/src/hooks/useMatchSample.js +74 -0
- package/dist/src/hooks/useMediaQuery.d.ts +11 -0
- package/dist/src/hooks/useMediaQuery.js +12 -0
- package/dist/src/hooks/useMessageBodyContent.d.ts +148 -0
- package/dist/src/hooks/useMessageBodyContent.js +272 -0
- package/dist/src/hooks/useMoveMessages.d.ts +27 -0
- package/dist/src/hooks/useMoveMessages.js +128 -0
- package/dist/src/hooks/useOrganizeJob.d.ts +39 -0
- package/dist/src/hooks/useOrganizeJob.js +95 -0
- package/dist/src/hooks/useRailPanels.d.ts +17 -0
- package/dist/src/hooks/useRailPanels.js +94 -0
- package/dist/src/hooks/useRedirectEnded.d.ts +41 -0
- package/dist/src/hooks/useRedirectEnded.js +106 -0
- package/dist/src/hooks/useRefreshControl.d.ts +97 -0
- package/dist/src/hooks/useRefreshControl.js +234 -0
- package/dist/src/hooks/useReportSpam.d.ts +102 -0
- package/dist/src/hooks/useReportSpam.js +173 -0
- package/dist/src/hooks/useRescueCandidates.d.ts +15 -0
- package/dist/src/hooks/useRescueCandidates.js +41 -0
- package/dist/src/hooks/useResultCount.d.ts +26 -0
- package/dist/src/hooks/useResultCount.js +40 -0
- package/dist/src/hooks/useResultFolderIndex.d.ts +8 -0
- package/dist/src/hooks/useResultFolderIndex.js +45 -0
- package/dist/src/hooks/useReturnFromRedirect.d.ts +19 -0
- package/dist/src/hooks/useReturnFromRedirect.js +38 -0
- package/dist/src/hooks/useRulePreview.d.ts +28 -0
- package/dist/src/hooks/useRulePreview.js +77 -0
- package/dist/src/hooks/useSaveDraft.d.ts +31 -0
- package/dist/src/hooks/useSaveDraft.js +183 -0
- package/dist/src/hooks/useSearchScope.d.ts +15 -0
- package/dist/src/hooks/useSearchScope.js +30 -0
- package/dist/src/hooks/useSearchSuggestions.d.ts +12 -0
- package/dist/src/hooks/useSearchSuggestions.js +77 -0
- package/dist/src/hooks/useSearchTokenContext.d.ts +16 -0
- package/dist/src/hooks/useSearchTokenContext.js +26 -0
- package/dist/src/hooks/useSelectedSubjects.d.ts +6 -0
- package/dist/src/hooks/useSelectedSubjects.js +62 -0
- package/dist/src/hooks/useSignature.d.ts +9 -0
- package/dist/src/hooks/useSignature.js +47 -0
- package/dist/src/hooks/useSpamMatchCounts.d.ts +15 -0
- package/dist/src/hooks/useSpamMatchCounts.js +74 -0
- package/dist/src/hooks/useStaleAccountSync.d.ts +101 -0
- package/dist/src/hooks/useStaleAccountSync.js +252 -0
- package/dist/src/hooks/useStarredThreads.d.ts +42 -0
- package/dist/src/hooks/useStarredThreads.js +100 -0
- package/dist/src/hooks/useThreadActions.d.ts +41 -0
- package/dist/src/hooks/useThreadActions.js +64 -0
- package/dist/src/hooks/useThreadMessageIds.d.ts +10 -0
- package/dist/src/hooks/useThreadMessageIds.js +22 -0
- package/dist/src/hooks/useThreadRow.d.ts +23 -0
- package/dist/src/hooks/useThreadRow.js +40 -0
- package/dist/src/hooks/useToggleStar.d.ts +31 -0
- package/dist/src/hooks/useToggleStar.js +96 -0
- package/dist/src/hooks/useToggleTrusted.d.ts +23 -0
- package/dist/src/hooks/useToggleTrusted.js +100 -0
- package/dist/src/hooks/useTriageLayer.d.ts +80 -0
- package/dist/src/hooks/useTriageLayer.js +99 -0
- package/dist/src/hooks/useTriggerSync.d.ts +30 -0
- package/dist/src/hooks/useTriggerSync.js +42 -0
- package/dist/src/hooks/useUpdateAddressFlags.d.ts +18 -0
- package/dist/src/hooks/useUpdateAddressFlags.js +93 -0
- package/dist/src/hooks/useUpdateFilter.d.ts +16 -0
- package/dist/src/hooks/useUpdateFilter.js +45 -0
- package/dist/src/hooks/useVisualViewport.d.ts +13 -0
- package/dist/src/hooks/useVisualViewport.js +37 -0
- package/dist/src/hooks/useWarningsAttention.d.ts +9 -0
- package/dist/src/hooks/useWarningsAttention.js +31 -0
- package/dist/src/index.css +27 -0
- package/dist/src/lib/account-order.d.ts +3 -0
- package/dist/src/lib/account-order.js +6 -0
- package/dist/src/lib/adjacent-message.d.ts +9 -0
- package/dist/src/lib/adjacent-message.js +19 -0
- package/dist/src/lib/api.d.ts +35 -0
- package/dist/src/lib/api.js +73 -0
- package/dist/src/lib/app-info.d.ts +24 -0
- package/dist/src/lib/app-info.js +26 -0
- package/dist/src/lib/attachment-download.d.ts +63 -0
- package/dist/src/lib/attachment-download.js +130 -0
- package/dist/src/lib/auto-moved.d.ts +46 -0
- package/dist/src/lib/auto-moved.js +82 -0
- package/dist/src/lib/autodiscovery.d.ts +42 -0
- package/dist/src/lib/autodiscovery.js +320 -0
- package/dist/src/lib/brief-criteria.d.ts +69 -0
- package/dist/src/lib/brief-criteria.js +62 -0
- package/dist/src/lib/brief.d.ts +98 -0
- package/dist/src/lib/brief.js +164 -0
- package/dist/src/lib/bug-report.d.ts +67 -0
- package/dist/src/lib/bug-report.js +212 -0
- package/dist/src/lib/bulk-action-copy.d.ts +67 -0
- package/dist/src/lib/bulk-action-copy.js +106 -0
- package/dist/src/lib/bulk-actions.d.ts +228 -0
- package/dist/src/lib/bulk-actions.js +242 -0
- package/dist/src/lib/calendar-collection-copy.d.ts +7 -0
- package/dist/src/lib/calendar-collection-copy.js +12 -0
- package/dist/src/lib/calendar-density.d.ts +26 -0
- package/dist/src/lib/calendar-density.js +31 -0
- package/dist/src/lib/calendar-feed-copy.d.ts +14 -0
- package/dist/src/lib/calendar-feed-copy.js +16 -0
- package/dist/src/lib/calendar-feed-url.d.ts +9 -0
- package/dist/src/lib/calendar-feed-url.js +11 -0
- package/dist/src/lib/calendar-format.d.ts +25 -0
- package/dist/src/lib/calendar-format.js +57 -0
- package/dist/src/lib/calendar-report.d.ts +4 -0
- package/dist/src/lib/calendar-report.js +15 -0
- package/dist/src/lib/calendar-route.d.ts +93 -0
- package/dist/src/lib/calendar-route.js +145 -0
- package/dist/src/lib/calendar-subscription.d.ts +6 -0
- package/dist/src/lib/calendar-subscription.js +8 -0
- package/dist/src/lib/calendar-suggestion.d.ts +56 -0
- package/dist/src/lib/calendar-suggestion.js +165 -0
- package/dist/src/lib/client.d.ts +2 -0
- package/dist/src/lib/client.js +30 -0
- package/dist/src/lib/compose-attachment-controller.d.ts +90 -0
- package/dist/src/lib/compose-attachment-controller.js +359 -0
- package/dist/src/lib/config-import.d.ts +136 -0
- package/dist/src/lib/config-import.js +371 -0
- package/dist/src/lib/console-errors.d.ts +16 -0
- package/dist/src/lib/console-errors.js +80 -0
- package/dist/src/lib/conversation-target.d.ts +16 -0
- package/dist/src/lib/conversation-target.js +1 -0
- package/dist/src/lib/dedupe-thread-messages.d.ts +14 -0
- package/dist/src/lib/dedupe-thread-messages.js +23 -0
- package/dist/src/lib/delete-folder.d.ts +66 -0
- package/dist/src/lib/delete-folder.js +110 -0
- package/dist/src/lib/display-category.d.ts +18 -0
- package/dist/src/lib/display-category.js +20 -0
- package/dist/src/lib/drafts.d.ts +50 -0
- package/dist/src/lib/drafts.js +91 -0
- package/dist/src/lib/error-classifier.d.ts +155 -0
- package/dist/src/lib/error-classifier.js +213 -0
- package/dist/src/lib/escalation-label.d.ts +18 -0
- package/dist/src/lib/escalation-label.js +20 -0
- package/dist/src/lib/fatal-error.d.ts +68 -0
- package/dist/src/lib/fatal-error.js +88 -0
- package/dist/src/lib/filter-report.d.ts +2 -0
- package/dist/src/lib/filter-report.js +13 -0
- package/dist/src/lib/flagged-criteria.d.ts +36 -0
- package/dist/src/lib/flagged-criteria.js +22 -0
- package/dist/src/lib/folder-failure.d.ts +2 -0
- package/dist/src/lib/folder-failure.js +8 -0
- package/dist/src/lib/folder-roles.d.ts +33 -0
- package/dist/src/lib/folder-roles.js +83 -0
- package/dist/src/lib/format.d.ts +156 -0
- package/dist/src/lib/format.js +269 -0
- package/dist/src/lib/fresh-mailbox-count.d.ts +76 -0
- package/dist/src/lib/fresh-mailbox-count.js +37 -0
- package/dist/src/lib/hot-sync-window.d.ts +28 -0
- package/dist/src/lib/hot-sync-window.js +41 -0
- package/dist/src/lib/i18n.d.ts +2 -0
- package/dist/src/lib/i18n.js +29 -0
- package/dist/src/lib/inbox-filters.d.ts +76 -0
- package/dist/src/lib/inbox-filters.js +95 -0
- package/dist/src/lib/intelligence-pref.d.ts +43 -0
- package/dist/src/lib/intelligence-pref.js +41 -0
- package/dist/src/lib/json.d.ts +8 -0
- package/dist/src/lib/json.js +10 -0
- package/dist/src/lib/junk-destination.d.ts +15 -0
- package/dist/src/lib/junk-destination.js +24 -0
- package/dist/src/lib/list-focus.d.ts +14 -0
- package/dist/src/lib/list-focus.js +21 -0
- package/dist/src/lib/list-header-chrome.d.ts +40 -0
- package/dist/src/lib/list-header-chrome.js +12 -0
- package/dist/src/lib/list-narrowing.d.ts +35 -0
- package/dist/src/lib/list-narrowing.js +133 -0
- package/dist/src/lib/list-verb-request.d.ts +43 -0
- package/dist/src/lib/list-verb-request.js +24 -0
- package/dist/src/lib/mail-context.d.ts +61 -0
- package/dist/src/lib/mail-context.js +24 -0
- package/dist/src/lib/mail-freshness.d.ts +57 -0
- package/dist/src/lib/mail-freshness.js +158 -0
- package/dist/src/lib/mail-route.d.ts +103 -0
- package/dist/src/lib/mail-route.js +115 -0
- package/dist/src/lib/mail-search.d.ts +141 -0
- package/dist/src/lib/mail-search.js +55 -0
- package/dist/src/lib/mailbox-sync-wait.d.ts +54 -0
- package/dist/src/lib/mailbox-sync-wait.js +44 -0
- package/dist/src/lib/message-attachments.d.ts +20 -0
- package/dist/src/lib/message-attachments.js +37 -0
- package/dist/src/lib/message-body-source.d.ts +30 -0
- package/dist/src/lib/message-body-source.js +30 -0
- package/dist/src/lib/move-options.d.ts +30 -0
- package/dist/src/lib/move-options.js +33 -0
- package/dist/src/lib/move-targets.d.ts +16 -0
- package/dist/src/lib/move-targets.js +61 -0
- package/dist/src/lib/network-error.d.ts +31 -0
- package/dist/src/lib/network-error.js +68 -0
- package/dist/src/lib/new-folder.d.ts +23 -0
- package/dist/src/lib/new-folder.js +41 -0
- package/dist/src/lib/onboarding-completion.d.ts +15 -0
- package/dist/src/lib/onboarding-completion.js +17 -0
- package/dist/src/lib/organize/clause-suggestions.d.ts +40 -0
- package/dist/src/lib/organize/clause-suggestions.js +61 -0
- package/dist/src/lib/organize/filter-edit-model.d.ts +47 -0
- package/dist/src/lib/organize/filter-edit-model.js +104 -0
- package/dist/src/lib/organize/filter-run.d.ts +27 -0
- package/dist/src/lib/organize/filter-run.js +27 -0
- package/dist/src/lib/organize/filter-status.d.ts +30 -0
- package/dist/src/lib/organize/filter-status.js +84 -0
- package/dist/src/lib/organize/label-delete-copy.d.ts +11 -0
- package/dist/src/lib/organize/label-delete-copy.js +17 -0
- package/dist/src/lib/organize/organize-model.d.ts +110 -0
- package/dist/src/lib/organize/organize-model.js +81 -0
- package/dist/src/lib/organize/organize-poll.d.ts +11 -0
- package/dist/src/lib/organize/organize-poll.js +21 -0
- package/dist/src/lib/organize/rule-model.d.ts +69 -0
- package/dist/src/lib/organize/rule-model.js +98 -0
- package/dist/src/lib/organize/search-to-rule.d.ts +19 -0
- package/dist/src/lib/organize/search-to-rule.js +65 -0
- package/dist/src/lib/outbox-search.d.ts +34 -0
- package/dist/src/lib/outbox-search.js +26 -0
- package/dist/src/lib/outbox-status.d.ts +47 -0
- package/dist/src/lib/outbox-status.js +45 -0
- package/dist/src/lib/provider-presets.d.ts +16 -0
- package/dist/src/lib/provider-presets.js +82 -0
- package/dist/src/lib/quarantine-entries.d.ts +15 -0
- package/dist/src/lib/quarantine-entries.js +40 -0
- package/dist/src/lib/query-error-handler.d.ts +21 -0
- package/dist/src/lib/query-error-handler.js +30 -0
- package/dist/src/lib/recent-searches.d.ts +2 -0
- package/dist/src/lib/recent-searches.js +37 -0
- package/dist/src/lib/recipient-suggestions.d.ts +2 -0
- package/dist/src/lib/recipient-suggestions.js +11 -0
- package/dist/src/lib/request-breadcrumbs.d.ts +59 -0
- package/dist/src/lib/request-breadcrumbs.js +114 -0
- package/dist/src/lib/rescue-candidates.d.ts +17 -0
- package/dist/src/lib/rescue-candidates.js +27 -0
- package/dist/src/lib/rescue-telemetry.d.ts +26 -0
- package/dist/src/lib/rescue-telemetry.js +32 -0
- package/dist/src/lib/result-count.d.ts +43 -0
- package/dist/src/lib/result-count.js +37 -0
- package/dist/src/lib/result-folder.d.ts +57 -0
- package/dist/src/lib/result-folder.js +67 -0
- package/dist/src/lib/route-breadcrumbs.d.ts +27 -0
- package/dist/src/lib/route-breadcrumbs.js +36 -0
- package/dist/src/lib/row-settlement.d.ts +11 -0
- package/dist/src/lib/row-settlement.js +20 -0
- package/dist/src/lib/rum-adapter.d.ts +4 -0
- package/dist/src/lib/rum-adapter.js +84 -0
- package/dist/src/lib/search-conversion.d.ts +17 -0
- package/dist/src/lib/search-conversion.js +17 -0
- package/dist/src/lib/search-params.d.ts +23 -0
- package/dist/src/lib/search-params.js +58 -0
- package/dist/src/lib/search-query.d.ts +1 -0
- package/dist/src/lib/search-query.js +10 -0
- package/dist/src/lib/search-result.d.ts +10 -0
- package/dist/src/lib/search-result.js +34 -0
- package/dist/src/lib/search-scope.d.ts +94 -0
- package/dist/src/lib/search-scope.js +86 -0
- package/dist/src/lib/search-suggestions.d.ts +98 -0
- package/dist/src/lib/search-suggestions.js +202 -0
- package/dist/src/lib/search-surface.d.ts +30 -0
- package/dist/src/lib/search-surface.js +23 -0
- package/dist/src/lib/search-token-index.d.ts +43 -0
- package/dist/src/lib/search-token-index.js +92 -0
- package/dist/src/lib/search-tokens.d.ts +136 -0
- package/dist/src/lib/search-tokens.js +206 -0
- package/dist/src/lib/search-view.d.ts +53 -0
- package/dist/src/lib/search-view.js +71 -0
- package/dist/src/lib/selection-account-scope.d.ts +18 -0
- package/dist/src/lib/selection-account-scope.js +26 -0
- package/dist/src/lib/selection-mode.d.ts +17 -0
- package/dist/src/lib/selection-mode.js +14 -0
- package/dist/src/lib/self-update-state.d.ts +156 -0
- package/dist/src/lib/self-update-state.js +384 -0
- package/dist/src/lib/sender-address.d.ts +24 -0
- package/dist/src/lib/sender-address.js +28 -0
- package/dist/src/lib/session-storage.d.ts +1 -0
- package/dist/src/lib/session-storage.js +8 -0
- package/dist/src/lib/spam-offer.d.ts +69 -0
- package/dist/src/lib/spam-offer.js +90 -0
- package/dist/src/lib/stale-build.d.ts +10 -0
- package/dist/src/lib/stale-build.js +24 -0
- package/dist/src/lib/starred-rows.d.ts +24 -0
- package/dist/src/lib/starred-rows.js +32 -0
- package/dist/src/lib/sync-warning-entries.d.ts +4 -0
- package/dist/src/lib/sync-warning-entries.js +22 -0
- package/dist/src/lib/telemetry-context.d.ts +3 -0
- package/dist/src/lib/telemetry-context.js +6 -0
- package/dist/src/lib/telemetry.d.ts +7 -0
- package/dist/src/lib/telemetry.js +6 -0
- package/dist/src/lib/theme-preference.d.ts +16 -0
- package/dist/src/lib/theme-preference.js +40 -0
- package/dist/src/lib/theme.d.ts +11 -0
- package/dist/src/lib/theme.js +31 -0
- package/dist/src/lib/thread-cache.d.ts +41 -0
- package/dist/src/lib/thread-cache.js +34 -0
- package/dist/src/lib/thread-list-cache.d.ts +51 -0
- package/dist/src/lib/thread-list-cache.js +51 -0
- package/dist/src/lib/thread-search-tokens.d.ts +61 -0
- package/dist/src/lib/thread-search-tokens.js +116 -0
- package/dist/src/lib/wizard-selection.d.ts +27 -0
- package/dist/src/lib/wizard-selection.js +17 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/main.js +9 -0
- package/dist/src/routeTree.gen.d.ts +1596 -0
- package/dist/src/routeTree.gen.js +414 -0
- package/dist/src/router.d.ts +12 -0
- package/dist/src/router.js +40 -0
- package/dist/src/routes/__root.d.ts +2 -0
- package/dist/src/routes/__root.js +46 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId/$recurrenceId.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId/$recurrenceId.js +18 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId/index.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId/index.js +15 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date/$calendarObjectId.js +12 -0
- package/dist/src/routes/calendar/$view.$date/index.d.ts +18 -0
- package/dist/src/routes/calendar/$view.$date/index.js +16 -0
- package/dist/src/routes/calendar/$view.$date/new.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date/new.js +19 -0
- package/dist/src/routes/calendar/$view.$date/suggestion.$suggestionId.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date/suggestion.$suggestionId.js +15 -0
- package/dist/src/routes/calendar/$view.$date.d.ts +13 -0
- package/dist/src/routes/calendar/$view.$date.js +69 -0
- package/dist/src/routes/calendar/index.d.ts +13 -0
- package/dist/src/routes/calendar/index.js +22 -0
- package/dist/src/routes/calendar.d.ts +14 -0
- package/dist/src/routes/calendar.js +68 -0
- package/dist/src/routes/import.d.ts +1 -0
- package/dist/src/routes/import.js +45 -0
- package/dist/src/routes/index.d.ts +1 -0
- package/dist/src/routes/index.js +6 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/$messageId/$mode.{-$outboxMessageId}.d.ts +29 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/$messageId/$mode.{-$outboxMessageId}.js +12 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/$messageId.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/$messageId.js +22 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/index.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId/$threadId/index.js +13 -0
- package/dist/src/routes/mail/$mailboxId/$threadId.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId/$threadId.js +11 -0
- package/dist/src/routes/mail/$mailboxId/compose.{-$outboxMessageId}.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId/compose.{-$outboxMessageId}.js +11 -0
- package/dist/src/routes/mail/$mailboxId/index.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId/index.js +9 -0
- package/dist/src/routes/mail/$mailboxId.d.ts +19 -0
- package/dist/src/routes/mail/$mailboxId.js +26 -0
- package/dist/src/routes/mail/brief/$threadId/$messageId/$mode.{-$outboxMessageId}.d.ts +29 -0
- package/dist/src/routes/mail/brief/$threadId/$messageId/$mode.{-$outboxMessageId}.js +24 -0
- package/dist/src/routes/mail/brief/$threadId/$messageId.d.ts +19 -0
- package/dist/src/routes/mail/brief/$threadId/$messageId.js +22 -0
- package/dist/src/routes/mail/brief/$threadId/index.d.ts +19 -0
- package/dist/src/routes/mail/brief/$threadId/index.js +13 -0
- package/dist/src/routes/mail/brief/$threadId.d.ts +19 -0
- package/dist/src/routes/mail/brief/$threadId.js +15 -0
- package/dist/src/routes/mail/brief/compose.{-$outboxMessageId}.d.ts +19 -0
- package/dist/src/routes/mail/brief/compose.{-$outboxMessageId}.js +19 -0
- package/dist/src/routes/mail/brief/index.d.ts +19 -0
- package/dist/src/routes/mail/brief/index.js +13 -0
- package/dist/src/routes/mail/brief.d.ts +19 -0
- package/dist/src/routes/mail/brief.js +27 -0
- package/dist/src/routes/mail/flagged/$threadId/$messageId/$mode.{-$outboxMessageId}.d.ts +29 -0
- package/dist/src/routes/mail/flagged/$threadId/$messageId/$mode.{-$outboxMessageId}.js +12 -0
- package/dist/src/routes/mail/flagged/$threadId/$messageId.d.ts +19 -0
- package/dist/src/routes/mail/flagged/$threadId/$messageId.js +22 -0
- package/dist/src/routes/mail/flagged/$threadId/index.d.ts +19 -0
- package/dist/src/routes/mail/flagged/$threadId/index.js +13 -0
- package/dist/src/routes/mail/flagged/$threadId.d.ts +19 -0
- package/dist/src/routes/mail/flagged/$threadId.js +15 -0
- package/dist/src/routes/mail/flagged/compose.{-$outboxMessageId}.d.ts +19 -0
- package/dist/src/routes/mail/flagged/compose.{-$outboxMessageId}.js +10 -0
- package/dist/src/routes/mail/flagged/index.d.ts +19 -0
- package/dist/src/routes/mail/flagged/index.js +9 -0
- package/dist/src/routes/mail/flagged.d.ts +19 -0
- package/dist/src/routes/mail/flagged.js +26 -0
- package/dist/src/routes/mail/index.d.ts +37 -0
- package/dist/src/routes/mail/index.js +13 -0
- package/dist/src/routes/mail/outbox/compose.{-$outboxMessageId}.d.ts +19 -0
- package/dist/src/routes/mail/outbox/compose.{-$outboxMessageId}.js +14 -0
- package/dist/src/routes/mail/outbox/draft/$outboxMessageId.d.ts +19 -0
- package/dist/src/routes/mail/outbox/draft/$outboxMessageId.js +18 -0
- package/dist/src/routes/mail/outbox/index.d.ts +19 -0
- package/dist/src/routes/mail/outbox/index.js +9 -0
- package/dist/src/routes/mail/outbox.d.ts +19 -0
- package/dist/src/routes/mail/outbox.js +22 -0
- package/dist/src/routes/mail.d.ts +16 -0
- package/dist/src/routes/mail.js +187 -0
- package/dist/src/routes/onboarding.d.ts +7 -0
- package/dist/src/routes/onboarding.js +35 -0
- package/dist/src/routes/settings/-shared/help-copy.d.ts +5 -0
- package/dist/src/routes/settings/-shared/help-copy.js +7 -0
- package/dist/src/routes/settings/accounts.d.ts +38 -0
- package/dist/src/routes/settings/accounts.js +396 -0
- package/dist/src/routes/settings/advanced.d.ts +1 -0
- package/dist/src/routes/settings/advanced.js +28 -0
- package/dist/src/routes/settings/appearance.d.ts +1 -0
- package/dist/src/routes/settings/appearance.js +61 -0
- package/dist/src/routes/settings/calendars.d.ts +1 -0
- package/dist/src/routes/settings/calendars.js +44 -0
- package/dist/src/routes/settings/filters.d.ts +5 -0
- package/dist/src/routes/settings/filters.js +88 -0
- package/dist/src/routes/settings/folders.d.ts +1 -0
- package/dist/src/routes/settings/folders.js +142 -0
- package/dist/src/routes/settings/index.d.ts +1 -0
- package/dist/src/routes/settings/index.js +5 -0
- package/dist/src/routes/settings/labels.d.ts +1 -0
- package/dist/src/routes/settings/labels.js +71 -0
- package/dist/src/routes/settings/senders.d.ts +6 -0
- package/dist/src/routes/settings/senders.js +202 -0
- package/dist/src/routes/settings/suggested-vips.d.ts +1 -0
- package/dist/src/routes/settings/suggested-vips.js +10 -0
- package/dist/src/routes/settings/warnings.d.ts +1 -0
- package/dist/src/routes/settings/warnings.js +20 -0
- package/dist/src/routes/settings.d.ts +14 -0
- package/dist/src/routes/settings.js +64 -0
- package/dist/src/routing/browsed-list.d.ts +28 -0
- package/dist/src/routing/browsed-list.js +61 -0
- package/dist/src/routing/calendar.d.ts +69 -0
- package/dist/src/routing/calendar.js +152 -0
- package/dist/src/routing/compose.d.ts +52 -0
- package/dist/src/routing/compose.js +139 -0
- package/dist/src/routing/fragment.d.ts +64 -0
- package/dist/src/routing/fragment.js +112 -0
- package/dist/src/routing/index.d.ts +14 -0
- package/dist/src/routing/index.js +14 -0
- package/dist/src/routing/nav-link.d.ts +28 -0
- package/dist/src/routing/nav-link.js +9 -0
- package/dist/src/routing/nav-selection.d.ts +13 -0
- package/dist/src/routing/nav-selection.js +29 -0
- package/dist/src/routing/open-thread.d.ts +65 -0
- package/dist/src/routing/open-thread.js +100 -0
- package/dist/src/routing/outbox-draft.d.ts +13 -0
- package/dist/src/routing/outbox-draft.js +37 -0
- package/dist/src/routing/reply.d.ts +102 -0
- package/dist/src/routing/reply.js +238 -0
- package/dist/src/routing/search-field.d.ts +45 -0
- package/dist/src/routing/search-field.js +67 -0
- package/dist/src/routing/search-mirror.d.ts +63 -0
- package/dist/src/routing/search-mirror.js +120 -0
- package/dist/src/routing/search-navigation.d.ts +16 -0
- package/dist/src/routing/search-navigation.js +32 -0
- package/dist/src/routing/sections.d.ts +16 -0
- package/dist/src/routing/sections.js +33 -0
- package/dist/src/routing/wizard-history.d.ts +83 -0
- package/dist/src/routing/wizard-history.js +153 -0
- package/dist/src/runtime-config.d.ts +59 -0
- package/dist/src/runtime-config.js +42 -0
- package/dist/src/shell/index.d.ts +17 -0
- package/dist/src/shell/index.js +61 -0
- package/package.json +145 -127
- package/harness/build.mjs +0 -121
- package/harness/index.html +0 -52
- package/harness/vite-preset.ts +0 -31
- package/index.html +0 -54
- package/spellcheck/empty-build.test.ts +0 -160
- package/spellcheck/languages.test.ts +0 -80
- package/spellcheck/languages.ts +0 -86
- package/spellcheck/vite-plugin-licence.test.ts +0 -140
- package/spellcheck/vite-plugin.test.ts +0 -230
- package/spellcheck/vite-plugin.ts +0 -385
- package/spellcheck/worker-stub.ts +0 -36
- package/src/auth/AccountMenu.tsx +0 -10
- package/src/auth/AccountSession.tsx +0 -19
- package/src/auth/BetterAuthShell.tsx +0 -233
- package/src/auth/SessionRateLimited.stories.tsx +0 -26
- package/src/auth/SessionRateLimited.tsx +0 -39
- package/src/auth/SignInAgain.tsx +0 -18
- package/src/auth/account-menu-mode.test.ts +0 -64
- package/src/auth/account-menu-mode.ts +0 -28
- package/src/auth/amplify-config.test.ts +0 -50
- package/src/auth/amplify-config.ts +0 -59
- package/src/auth/auth-error.test.ts +0 -129
- package/src/auth/auth-error.ts +0 -120
- package/src/auth/auth-interceptor.test.ts +0 -104
- package/src/auth/auth-interceptor.ts +0 -28
- package/src/auth/better-auth/BetterAuthAccount.tsx +0 -25
- package/src/auth/better-auth-config.ts +0 -253
- package/src/auth/better-auth-provider.tsx +0 -20
- package/src/auth/better-auth-token.test.ts +0 -349
- package/src/auth/cognito/CognitoAccount.tsx +0 -48
- package/src/auth/cognito/CognitoShell.tsx +0 -266
- package/src/auth/cognito/cognito-token.test.ts +0 -106
- package/src/auth/cognito/cognito-token.ts +0 -47
- package/src/auth/cognito-provider.tsx +0 -22
- package/src/auth/cognito-sign-in.stories.tsx +0 -90
- package/src/auth/combined-provider.tsx +0 -42
- package/src/auth/composition.test.ts +0 -59
- package/src/auth/email-sign-in.stories.tsx +0 -128
- package/src/auth/provider.tsx +0 -68
- package/src/auth/session-gate.render.test.ts +0 -77
- package/src/auth/session-state.test.ts +0 -66
- package/src/auth/session-state.ts +0 -41
- package/src/auth/sign-out-visibility.test.ts +0 -40
- package/src/auth/sign-out-visibility.ts +0 -10
- package/src/auth/sign-up-disabled.test.ts +0 -23
- package/src/components/calendar/AgendaStrip.stories.tsx +0 -291
- package/src/components/calendar/AgendaStrip.tsx +0 -162
- package/src/components/calendar/AgendaView.stories.tsx +0 -112
- package/src/components/calendar/AgendaView.tsx +0 -241
- package/src/components/calendar/CalendarComposePane.stories.tsx +0 -151
- package/src/components/calendar/CalendarComposePane.tsx +0 -127
- package/src/components/calendar/CalendarComposeSeed.tsx +0 -35
- package/src/components/calendar/CalendarEventPane.stories.tsx +0 -200
- package/src/components/calendar/CalendarEventPane.tsx +0 -167
- package/src/components/calendar/CalendarShell.stories.tsx +0 -177
- package/src/components/calendar/CalendarShell.tsx +0 -83
- package/src/components/calendar/CalendarUnavailable.tsx +0 -56
- package/src/components/calendar/CalendarViewPlaceholder.stories.tsx +0 -41
- package/src/components/calendar/CalendarViewPlaceholder.tsx +0 -17
- package/src/components/calendar/CalendarWaiting.tsx +0 -102
- package/src/components/calendar/CalendarWorkspace.stories.tsx +0 -374
- package/src/components/calendar/CalendarWorkspace.tsx +0 -258
- package/src/components/calendar/ChangeCalendarSuggestion.stories.tsx +0 -187
- package/src/components/calendar/ChangeCalendarSuggestion.tsx +0 -159
- package/src/components/calendar/OpenCalendarEvent.stories.tsx +0 -273
- package/src/components/calendar/OpenCalendarEvent.tsx +0 -353
- package/src/components/calendar/PendingSuggestions.tsx +0 -100
- package/src/components/calendar/WriteCalendarEvent.stories.tsx +0 -90
- package/src/components/calendar/WriteCalendarEvent.tsx +0 -104
- package/src/components/calendar/agenda-address.render.test.ts +0 -493
- package/src/components/calendar/agenda-strip.render.test.ts +0 -241
- package/src/components/calendar/calendar-app.stories.tsx +0 -122
- package/src/components/calendar/calendar-story-fixtures.ts +0 -118
- package/src/components/calendar/calendar-story-server.tsx +0 -157
- package/src/components/calendar/calendar-workspace.render.test.ts +0 -221
- package/src/components/calendar/calendar-write-flow.render.test.ts +0 -373
- package/src/components/calendar/change-suggestion-first.render.test.ts +0 -304
- package/src/components/calendar/pending-suggestions.render.test.ts +0 -206
- package/src/components/compose/AddressField.tsx +0 -64
- package/src/components/compose/ComposeForm.tsx +0 -1427
- package/src/components/compose/ComposeProvider.tsx +0 -174
- package/src/components/compose/ComposeSmtpMissingBanner.tsx +0 -25
- package/src/components/compose/ConversationCompose.tsx +0 -88
- package/src/components/compose/FromSelector.render.test.ts +0 -99
- package/src/components/compose/FromSelector.stories.tsx +0 -61
- package/src/components/compose/FromSelector.tsx +0 -74
- package/src/components/compose/FullCompose.tsx +0 -93
- package/src/components/compose/MobileComposeSheet.tsx +0 -134
- package/src/components/compose/attachment-only-source.render.test.ts +0 -234
- package/src/components/compose/compose-inline-image.render.test.ts +0 -542
- package/src/components/compose/compose-send-stops-autosave.render.test.ts +0 -328
- package/src/components/compose/compose-spellcheck-failure.render.test.ts +0 -114
- package/src/components/compose/compose-spellcheck.test.ts +0 -157
- package/src/components/compose/compose-spellcheck.ts +0 -56
- package/src/components/compose/compose-starts-a-second-message.render.test.ts +0 -171
- package/src/components/compose/compose-title.ts +0 -10
- package/src/components/compose/compose.stories.tsx +0 -405
- package/src/components/compose/draft-discard-failure.render.test.ts +0 -138
- package/src/components/compose/forward-autosave-is-not-fatal.render.test.ts +0 -358
- package/src/components/compose/mail-sync-off-refusal.ts +0 -7
- package/src/components/compose/mobile-header-stays-expanded.render.test.ts +0 -229
- package/src/components/compose/quote-leaves-with-the-send.render.test.ts +0 -235
- package/src/components/compose/quoted-message.test.ts +0 -158
- package/src/components/compose/quoted-message.ts +0 -216
- package/src/components/compose/reopened-draft-writes-nothing.render.test.ts +0 -148
- package/src/components/compose/reply-all-on-resumed-draft.render.test.ts +0 -250
- package/src/components/compose/reply-with-times.ts +0 -22
- package/src/components/compose/send-from-mail-off-account.render.test.ts +0 -173
- package/src/components/compose/send-poll-server-error.render.test.ts +0 -120
- package/src/components/compose/send-watch-outlives-sent.render.test.ts +0 -121
- package/src/components/config-import/ConfigImportWizard.flow.test.ts +0 -326
- package/src/components/config-import/ConfigImportWizard.tsx +0 -721
- package/src/components/config-import/config-import.fixtures.ts +0 -254
- package/src/components/config-import/config-import.stories.tsx +0 -486
- package/src/components/config-import/steps.import-failure.test.ts +0 -91
- package/src/components/config-import/steps.tsx +0 -784
- package/src/components/config-import/steps.viewport.test.ts +0 -216
- package/src/components/layout/AppShellSkeleton.tsx +0 -53
- package/src/components/layout/ComposeFab.tsx +0 -22
- package/src/components/layout/Drawer.focus.test.ts +0 -253
- package/src/components/layout/Drawer.tsx +0 -108
- package/src/components/layout/MailShell.tsx +0 -106
- package/src/components/layout/MailTopBar.tsx +0 -99
- package/src/components/layout/mail-shell.stories.tsx +0 -142
- package/src/components/mail/AuthenticityBanner.tsx +0 -45
- package/src/components/mail/AutoMovedIndicator.tsx +0 -53
- package/src/components/mail/BlockedImagesNotice.render.test.ts +0 -114
- package/src/components/mail/BlockedImagesNotice.tsx +0 -63
- package/src/components/mail/BriefPane.tsx +0 -477
- package/src/components/mail/BulkRunProvider.tsx +0 -344
- package/src/components/mail/ConversationView.tsx +0 -519
- package/src/components/mail/DailyBrief.scope.test.ts +0 -76
- package/src/components/mail/DailyBrief.tsx +0 -1094
- package/src/components/mail/DeleteConfirmDialog.render.test.ts +0 -412
- package/src/components/mail/DeleteConfirmDialog.tsx +0 -143
- package/src/components/mail/DraftsView.tsx +0 -255
- package/src/components/mail/EmptyTrashBar.render.test.ts +0 -133
- package/src/components/mail/EmptyTrashBar.tsx +0 -181
- package/src/components/mail/FlaggedList.tsx +0 -359
- package/src/components/mail/FlaggedPane.tsx +0 -473
- package/src/components/mail/IntelligenceDrawer.tsx +0 -52
- package/src/components/mail/IntelligencePane.render.test.ts +0 -116
- package/src/components/mail/IntelligencePane.test.ts +0 -16
- package/src/components/mail/IntelligencePane.tsx +0 -391
- package/src/components/mail/LabelApplyTrigger.tsx +0 -67
- package/src/components/mail/MailListHeader.chrome-stability.render.test.ts +0 -323
- package/src/components/mail/MailListHeader.tsx +0 -613
- package/src/components/mail/MailNav.tsx +0 -70
- package/src/components/mail/MailSidebarAdapter.tsx +0 -319
- package/src/components/mail/MailViewChrome.tsx +0 -124
- package/src/components/mail/MailboxPane.tsx +0 -1285
- package/src/components/mail/MessageActionMenu.tsx +0 -296
- package/src/components/mail/MessageAttachments.interaction.test.ts +0 -245
- package/src/components/mail/MessageAttachments.tsx +0 -188
- package/src/components/mail/MessageBody.blocked-sender.test.ts +0 -193
- package/src/components/mail/MessageBody.tsx +0 -226
- package/src/components/mail/MessageBodyErrorBanner.render.test.ts +0 -85
- package/src/components/mail/MessageBodyErrorBanner.test.ts +0 -56
- package/src/components/mail/MessageBodyErrorBanner.tsx +0 -90
- package/src/components/mail/MessageCard.blocked-sender.test.ts +0 -246
- package/src/components/mail/MessageCard.tsx +0 -430
- package/src/components/mail/MessageList.move-guard.test.ts +0 -64
- package/src/components/mail/MessageList.run-reporting.test.ts +0 -87
- package/src/components/mail/MessageList.tsx +0 -1383
- package/src/components/mail/MessageListItem.test.ts +0 -153
- package/src/components/mail/MessageListItem.tsx +0 -106
- package/src/components/mail/MessageRow.render.test.ts +0 -54
- package/src/components/mail/MessageRow.tsx +0 -269
- package/src/components/mail/MessageSettlementAlert.render.test.ts +0 -182
- package/src/components/mail/MessageSettlementAlert.tsx +0 -126
- package/src/components/mail/MessageToolbar.interaction.test.ts +0 -250
- package/src/components/mail/MessageToolbar.render.test.ts +0 -124
- package/src/components/mail/MessageToolbar.tsx +0 -215
- package/src/components/mail/MobileMessageBar.tsx +0 -140
- package/src/components/mail/MoveToTrigger.render.test.ts +0 -310
- package/src/components/mail/MoveToTrigger.tsx +0 -298
- package/src/components/mail/NavMenuButton.tsx +0 -25
- package/src/components/mail/OutboxPane.tsx +0 -584
- package/src/components/mail/PullToRefresh.tsx +0 -24
- package/src/components/mail/RawMessageView.tsx +0 -84
- package/src/components/mail/RoleAppointmentPromptProvider.render.test.ts +0 -294
- package/src/components/mail/RoleAppointmentPromptProvider.tsx +0 -251
- package/src/components/mail/SelectionWizardHost.search-entry.test.ts +0 -81
- package/src/components/mail/SelectionWizardHost.tsx +0 -1078
- package/src/components/mail/SpamRescue.tsx +0 -126
- package/src/components/mail/SwipeableMessageRow.modifier-select.test.ts +0 -243
- package/src/components/mail/SwipeableMessageRow.render.test.ts +0 -110
- package/src/components/mail/SwipeableMessageRow.tsx +0 -160
- package/src/components/mail/ThreadListInteraction.test.ts +0 -546
- package/src/components/mail/ThreadListInteraction.tsx +0 -538
- package/src/components/mail/authenticity-warning.stories.tsx +0 -116
- package/src/components/mail/blocked-images-notice.stories.tsx +0 -90
- package/src/components/mail/brief-server-sections.render.test.ts +0 -656
- package/src/components/mail/bulk-run-state.test.ts +0 -101
- package/src/components/mail/bulk-run-state.ts +0 -99
- package/src/components/mail/conversation-reply-identity.render.test.ts +0 -307
- package/src/components/mail/conversation-reply-reach.render.test.ts +0 -414
- package/src/components/mail/daily-brief.stories.tsx +0 -264
- package/src/components/mail/delete-open-message-keeps-the-list.render.test.ts +0 -154
- package/src/components/mail/detail-surface.stories.tsx +0 -171
- package/src/components/mail/drafts.stories.tsx +0 -61
- package/src/components/mail/empty-trash-bar.stories.tsx +0 -121
- package/src/components/mail/enter-cursor-late-open.render.test.ts +0 -197
- package/src/components/mail/filtered-empty-state.render.test.ts +0 -240
- package/src/components/mail/flagged-search-reach.render.test.ts +0 -272
- package/src/components/mail/flagged.stories.tsx +0 -159
- package/src/components/mail/intelligence-auto-open-pref.render.test.ts +0 -412
- package/src/components/mail/intelligence-drawer.stories.tsx +0 -353
- package/src/components/mail/intelligence-shortcut-surface.render.test.ts +0 -373
- package/src/components/mail/intelligence-story-calendar.ts +0 -19
- package/src/components/mail/intelligence-surface-reach.render.test.ts +0 -220
- package/src/components/mail/mail-pickers.stories.tsx +0 -82
- package/src/components/mail/message-body-error-banner-content.ts +0 -87
- package/src/components/mail/message-gone.stories.tsx +0 -44
- package/src/components/mail/offer-times-reply.render.test.ts +0 -557
- package/src/components/mail/organize-run-state.test.ts +0 -115
- package/src/components/mail/organize-run-state.ts +0 -44
- package/src/components/mail/outbox.stories.tsx +0 -59
- package/src/components/mail/reclassify-remove-override.render.test.ts +0 -138
- package/src/components/mail/reply-verbs-reach.render.test.ts +0 -235
- package/src/components/mail/search.stories.tsx +0 -280
- package/src/components/mail/selection-wizard-run-controls.test.ts +0 -231
- package/src/components/mail/selection-wizard-run-controls.ts +0 -101
- package/src/components/mail/selection-wizard.stories.tsx +0 -160
- package/src/components/mail/spam-offer-server-count.render.test.ts +0 -349
- package/src/components/mail/two-window-listeners-one-key.render.test.ts +0 -593
- package/src/components/mail/useModifierSelect.render.test.ts +0 -223
- package/src/components/mail/useModifierSelect.ts +0 -100
- package/src/components/onboarding/OnboardingWizard.flow.test.ts +0 -709
- package/src/components/onboarding/OnboardingWizard.tsx +0 -1599
- package/src/components/onboarding/credential-steps.tsx +0 -441
- package/src/components/onboarding/onboarding-servers.stories.tsx +0 -49
- package/src/components/onboarding/onboarding.stories.tsx +0 -550
- package/src/components/overlay-escape.render.test.ts +0 -155
- package/src/components/self-update/SelfUpdateOverlay.tsx +0 -45
- package/src/components/settings/AccountFormPanel.render.test.ts +0 -269
- package/src/components/settings/AccountFormPanel.test.ts +0 -37
- package/src/components/settings/AccountFormPanel.tsx +0 -949
- package/src/components/settings/AccountServices.render.test.ts +0 -257
- package/src/components/settings/AccountServices.tsx +0 -181
- package/src/components/settings/AccountServicesCard.stories.tsx +0 -71
- package/src/components/settings/AccountServicesCard.tsx +0 -76
- package/src/components/settings/AdvancedNavIcon.tsx +0 -23
- package/src/components/settings/CalendarCreateCard.stories.tsx +0 -33
- package/src/components/settings/CalendarCreateCard.tsx +0 -149
- package/src/components/settings/CalendarDetailsForm.stories.tsx +0 -57
- package/src/components/settings/CalendarDetailsForm.tsx +0 -136
- package/src/components/settings/CalendarFeedCard.render.test.ts +0 -154
- package/src/components/settings/CalendarFeedCard.stories.tsx +0 -152
- package/src/components/settings/CalendarFeedCard.tsx +0 -289
- package/src/components/settings/CalendarFeedPanel.tsx +0 -38
- package/src/components/settings/CalendarSettingsPanel.tsx +0 -60
- package/src/components/settings/CalendarSubscribeCard.stories.tsx +0 -89
- package/src/components/settings/CalendarSubscribeCard.tsx +0 -115
- package/src/components/settings/CalendarSubscriptionStatus.stories.tsx +0 -77
- package/src/components/settings/CalendarSubscriptionStatus.tsx +0 -87
- package/src/components/settings/ConfigExportCard.tsx +0 -114
- package/src/components/settings/ConfigTransferPanel.tsx +0 -72
- package/src/components/settings/DangerZone.tsx +0 -30
- package/src/components/settings/DeleteAccountDialog.render.test.ts +0 -47
- package/src/components/settings/DeleteAccountDialog.tsx +0 -224
- package/src/components/settings/DeleteFolderDialog.render.test.ts +0 -836
- package/src/components/settings/DeleteFolderDialog.tsx +0 -406
- package/src/components/settings/FilterActionError.render.test.ts +0 -46
- package/src/components/settings/FilterActionError.stories.tsx +0 -50
- package/src/components/settings/FilterActionError.tsx +0 -40
- package/src/components/settings/FilterEditor.render.test.ts +0 -307
- package/src/components/settings/FilterEditor.tsx +0 -364
- package/src/components/settings/FilterEditorSurface.tsx +0 -65
- package/src/components/settings/FiltersList.render.test.ts +0 -202
- package/src/components/settings/FiltersList.stories.tsx +0 -113
- package/src/components/settings/FiltersList.tsx +0 -191
- package/src/components/settings/LabelsList.stories.tsx +0 -134
- package/src/components/settings/LabelsList.tsx +0 -112
- package/src/components/settings/SelfUpdatePanel.tsx +0 -47
- package/src/components/settings/TimeZoneSelect.tsx +0 -43
- package/src/components/settings/TlsRootCaDownload.render.test.ts +0 -37
- package/src/components/settings/TlsRootCaDownload.tsx +0 -33
- package/src/components/settings/WarningsNavIcon.tsx +0 -12
- package/src/components/settings/WarningsPanel.dom.test.ts +0 -201
- package/src/components/settings/WarningsPanel.render.test.ts +0 -56
- package/src/components/settings/WarningsPanel.tsx +0 -244
- package/src/components/settings/account-form-helpers.test.ts +0 -172
- package/src/components/settings/account-form-helpers.ts +0 -105
- package/src/components/settings/accounts.stories.tsx +0 -386
- package/src/components/settings/advanced.stories.tsx +0 -40
- package/src/components/settings/appearance.stories.tsx +0 -33
- package/src/components/settings/calendar-collection-cards.render.test.ts +0 -149
- package/src/components/settings/calendar-feed-flow.render.test.ts +0 -449
- package/src/components/settings/folders.stories.tsx +0 -89
- package/src/components/settings/label-delete-confirm.stories.tsx +0 -83
- package/src/components/settings/self-update.stories.tsx +0 -288
- package/src/components/settings/senders.stories.tsx +0 -155
- package/src/components/settings/settings-filter.stories.tsx +0 -145
- package/src/components/settings/warnings.stories.tsx +0 -290
- package/src/components/ui/AppVersion.stories.tsx +0 -31
- package/src/components/ui/AppVersion.tsx +0 -57
- package/src/components/ui/BugReportButton.stories.tsx +0 -19
- package/src/components/ui/BugReportButton.tsx +0 -20
- package/src/components/ui/ErrorBannerProvider.render.test.ts +0 -85
- package/src/components/ui/ErrorBannerProvider.tsx +0 -134
- package/src/components/ui/FatalErrorOverlay.render.test.ts +0 -66
- package/src/components/ui/FatalErrorOverlay.stories.tsx +0 -55
- package/src/components/ui/FatalErrorOverlay.tsx +0 -158
- package/src/components/ui/banner-way-out.test.ts +0 -71
- package/src/components/ui/error-banners.test.ts +0 -186
- package/src/components/ui/error-banners.ts +0 -121
- package/src/components/ui/folder-role-refusal.test.ts +0 -124
- package/src/components/ui/folder-role-refusal.ts +0 -69
- package/src/components/ui/placement-refusal.test.ts +0 -98
- package/src/components/ui/placement-refusal.ts +0 -71
- package/src/hooks/bulk-chunking.render.test.ts +0 -157
- package/src/hooks/calendar/agenda-window.test.ts +0 -392
- package/src/hooks/calendar/agenda-window.ts +0 -210
- package/src/hooks/calendar/calendar-collections.render.test.ts +0 -281
- package/src/hooks/calendar/calendar-reads.render.test.ts +0 -265
- package/src/hooks/calendar/calendar-writes.render.test.ts +0 -326
- package/src/hooks/calendar/draft.test.ts +0 -537
- package/src/hooks/calendar/draft.ts +0 -204
- package/src/hooks/calendar/index.ts +0 -122
- package/src/hooks/calendar/instance.test.ts +0 -206
- package/src/hooks/calendar/instance.ts +0 -224
- package/src/hooks/calendar/recurrence-rule.test.ts +0 -134
- package/src/hooks/calendar/recurrence-rule.ts +0 -177
- package/src/hooks/calendar/resource.test.ts +0 -141
- package/src/hooks/calendar/resource.ts +0 -104
- package/src/hooks/calendar/selection.ts +0 -110
- package/src/hooks/calendar/suggestion-draft.ts +0 -77
- package/src/hooks/calendar/useCalendarCollectionWrites.ts +0 -131
- package/src/hooks/calendar/useCalendarEvent.ts +0 -46
- package/src/hooks/calendar/useCalendarEvents.ts +0 -195
- package/src/hooks/calendar/useCalendarFeed.ts +0 -163
- package/src/hooks/calendar/useCalendarFreeBusy.ts +0 -80
- package/src/hooks/calendar/useCalendarJump.ts +0 -117
- package/src/hooks/calendar/useCalendarSubscriptions.ts +0 -103
- package/src/hooks/calendar/useCalendarSuggestions.ts +0 -279
- package/src/hooks/calendar/useCalendarWrites.ts +0 -177
- package/src/hooks/calendar/useCalendars.ts +0 -59
- package/src/hooks/calendar/useDraftClashes.ts +0 -93
- package/src/hooks/calendar/window.test.ts +0 -189
- package/src/hooks/calendar/window.ts +0 -188
- package/src/hooks/cross-account-bulk.render.test.ts +0 -164
- package/src/hooks/escalated-run-lifetime.render.test.ts +0 -349
- package/src/hooks/escalated-run-refusal.render.test.ts +0 -373
- package/src/hooks/escalated-run-survives-navigation.render.test.ts +0 -524
- package/src/hooks/intelligence-calendar.render.test.ts +0 -497
- package/src/hooks/intelligence-drawer.render.test.ts +0 -99
- package/src/hooks/mutation-optimism.test.ts +0 -278
- package/src/hooks/queries/keys.ts +0 -9
- package/src/hooks/refusal-escalation.render.test.ts +0 -243
- package/src/hooks/signed-out-poll-is-not-fatal.render.test.ts +0 -126
- package/src/hooks/stale-account-sync-visibility.test.ts +0 -166
- package/src/hooks/update-restart-escalation.render.test.ts +0 -340
- package/src/hooks/use-system-update.test.ts +0 -686
- package/src/hooks/use-system-update.ts +0 -341
- package/src/hooks/useApplyLabel.ts +0 -71
- package/src/hooks/useArchiveMailbox.ts +0 -162
- package/src/hooks/useAutoMovedBadge.ts +0 -145
- package/src/hooks/useBriefSections.ts +0 -320
- package/src/hooks/useCalendarData.ts +0 -94
- package/src/hooks/useClauseSuggestions.ts +0 -57
- package/src/hooks/useComposeAttachments.ts +0 -108
- package/src/hooks/useComposeLanguages.ts +0 -69
- package/src/hooks/useCreateMailbox.render.test.ts +0 -233
- package/src/hooks/useCreateMailbox.ts +0 -153
- package/src/hooks/useCurrentMailboxName.ts +0 -128
- package/src/hooks/useDebouncedValue.ts +0 -12
- package/src/hooks/useDeleteFolder.ts +0 -380
- package/src/hooks/useDeleteMessages.test.ts +0 -62
- package/src/hooks/useDeleteMessages.ts +0 -260
- package/src/hooks/useDeleteOutcome.ts +0 -70
- package/src/hooks/useEmptyTrash.render.test.ts +0 -194
- package/src/hooks/useEmptyTrash.ts +0 -191
- package/src/hooks/useEscalatedActions.test.ts +0 -36
- package/src/hooks/useEscalatedActions.ts +0 -334
- package/src/hooks/useFilters.test.ts +0 -106
- package/src/hooks/useFilters.ts +0 -188
- package/src/hooks/useFolderLabelTranslator.ts +0 -19
- package/src/hooks/useFollowFocusOpen.render.test.ts +0 -145
- package/src/hooks/useFollowFocusOpen.ts +0 -81
- package/src/hooks/useInitialSyncProgress.render.test.ts +0 -314
- package/src/hooks/useInitialSyncProgress.ts +0 -134
- package/src/hooks/useInlineImages.ts +0 -93
- package/src/hooks/useIntelligenceCalendar.ts +0 -394
- package/src/hooks/useIntelligenceData.test.ts +0 -403
- package/src/hooks/useIntelligenceData.ts +0 -325
- package/src/hooks/useIntelligenceDrawer.ts +0 -54
- package/src/hooks/useIntelligenceSurface.ts +0 -103
- package/src/hooks/useIsDark.ts +0 -27
- package/src/hooks/useKeyboardNavigation.ts +0 -130
- package/src/hooks/useLabels.ts +0 -124
- package/src/hooks/useLayoutTier.test.ts +0 -96
- package/src/hooks/useLayoutTier.ts +0 -60
- package/src/hooks/useMailboxAccount.ts +0 -67
- package/src/hooks/useMailboxNameIndex.ts +0 -32
- package/src/hooks/useMarkAsRead.test.ts +0 -307
- package/src/hooks/useMarkAsRead.ts +0 -333
- package/src/hooks/useMatchSample.ts +0 -104
- package/src/hooks/useMediaQuery.ts +0 -13
- package/src/hooks/useMessageBodyContent.test.ts +0 -370
- package/src/hooks/useMessageBodyContent.ts +0 -388
- package/src/hooks/useMoveMessages.ts +0 -193
- package/src/hooks/useOrganizeJob.render.test.ts +0 -190
- package/src/hooks/useOrganizeJob.ts +0 -146
- package/src/hooks/useRailPanels.ts +0 -128
- package/src/hooks/useRedirectEnded.ts +0 -116
- package/src/hooks/useRefreshControl.test.ts +0 -287
- package/src/hooks/useRefreshControl.ts +0 -347
- package/src/hooks/useReportSpam.escalation.test.ts +0 -135
- package/src/hooks/useReportSpam.render.test.ts +0 -113
- package/src/hooks/useReportSpam.test.ts +0 -115
- package/src/hooks/useReportSpam.ts +0 -244
- package/src/hooks/useRescueCandidates.test.ts +0 -194
- package/src/hooks/useRescueCandidates.ts +0 -48
- package/src/hooks/useResultCount.render.test.ts +0 -161
- package/src/hooks/useResultCount.ts +0 -68
- package/src/hooks/useResultFolderIndex.ts +0 -88
- package/src/hooks/useReturnFromRedirect.ts +0 -41
- package/src/hooks/useRulePreview.ts +0 -122
- package/src/hooks/useSaveDraft.ts +0 -244
- package/src/hooks/useSearchScope.ts +0 -46
- package/src/hooks/useSearchSuggestions.ts +0 -126
- package/src/hooks/useSearchTokenContext.ts +0 -28
- package/src/hooks/useSelectedSubjects.ts +0 -79
- package/src/hooks/useSignature.ts +0 -69
- package/src/hooks/useSpamMatchCounts.ts +0 -102
- package/src/hooks/useStaleAccountSync.test.ts +0 -300
- package/src/hooks/useStaleAccountSync.ts +0 -325
- package/src/hooks/useStarredThreads.test.ts +0 -209
- package/src/hooks/useStarredThreads.ts +0 -146
- package/src/hooks/useThreadActions.star.test.ts +0 -200
- package/src/hooks/useThreadActions.ts +0 -127
- package/src/hooks/useThreadMessageIds.ts +0 -33
- package/src/hooks/useThreadRow.ts +0 -49
- package/src/hooks/useToggleStar.test.ts +0 -131
- package/src/hooks/useToggleStar.ts +0 -164
- package/src/hooks/useToggleTrusted.test.ts +0 -106
- package/src/hooks/useToggleTrusted.ts +0 -157
- package/src/hooks/useTriageLayer.ts +0 -167
- package/src/hooks/useTriggerSync.test.ts +0 -18
- package/src/hooks/useTriggerSync.ts +0 -64
- package/src/hooks/useUpdateAddressFlags.ts +0 -152
- package/src/hooks/useUpdateFilter.ts +0 -56
- package/src/hooks/useVisualViewport.render.test.ts +0 -63
- package/src/hooks/useVisualViewport.ts +0 -51
- package/src/hooks/useWarningsAttention.ts +0 -37
- package/src/index.css +0 -28
- package/src/index.css.test.ts +0 -97
- package/src/kit-stylesheets.test.ts +0 -64
- package/src/lib/account-order.test.ts +0 -74
- package/src/lib/account-order.ts +0 -13
- package/src/lib/adjacent-message.test.ts +0 -34
- package/src/lib/adjacent-message.ts +0 -20
- package/src/lib/api.ts +0 -121
- package/src/lib/app-info.ts +0 -32
- package/src/lib/attachment-download.test.ts +0 -207
- package/src/lib/attachment-download.ts +0 -195
- package/src/lib/auto-moved.test.ts +0 -234
- package/src/lib/auto-moved.ts +0 -103
- package/src/lib/autodiscovery.test.ts +0 -47
- package/src/lib/autodiscovery.ts +0 -354
- package/src/lib/brief-chip-query.test.ts +0 -85
- package/src/lib/brief-criteria.test.ts +0 -168
- package/src/lib/brief-criteria.ts +0 -129
- package/src/lib/brief.test.ts +0 -493
- package/src/lib/brief.ts +0 -205
- package/src/lib/bug-report.test.ts +0 -487
- package/src/lib/bug-report.ts +0 -320
- package/src/lib/bulk-action-copy.test.ts +0 -123
- package/src/lib/bulk-action-copy.ts +0 -182
- package/src/lib/bulk-actions.test.ts +0 -612
- package/src/lib/bulk-actions.ts +0 -400
- package/src/lib/calendar-collection-copy.test.ts +0 -23
- package/src/lib/calendar-collection-copy.ts +0 -21
- package/src/lib/calendar-density.ts +0 -46
- package/src/lib/calendar-feed-copy.ts +0 -29
- package/src/lib/calendar-feed-url.ts +0 -14
- package/src/lib/calendar-format.ts +0 -74
- package/src/lib/calendar-report.ts +0 -21
- package/src/lib/calendar-route.test.ts +0 -224
- package/src/lib/calendar-route.ts +0 -197
- package/src/lib/calendar-subscription.ts +0 -11
- package/src/lib/calendar-suggestion.test.ts +0 -189
- package/src/lib/calendar-suggestion.ts +0 -263
- package/src/lib/calendar-suggestion.west.test.ts +0 -61
- package/src/lib/client.test.ts +0 -114
- package/src/lib/client.ts +0 -33
- package/src/lib/compose-attachment-controller.test.ts +0 -352
- package/src/lib/compose-attachment-controller.ts +0 -519
- package/src/lib/config-import.test.ts +0 -339
- package/src/lib/config-import.ts +0 -512
- package/src/lib/console-errors.test.ts +0 -64
- package/src/lib/console-errors.ts +0 -92
- package/src/lib/conversation-target.ts +0 -17
- package/src/lib/dedupe-thread-messages.test.ts +0 -79
- package/src/lib/dedupe-thread-messages.ts +0 -26
- package/src/lib/delete-folder.test.ts +0 -304
- package/src/lib/delete-folder.ts +0 -188
- package/src/lib/desktop-breakpoint.test.ts +0 -76
- package/src/lib/display-category.test.ts +0 -32
- package/src/lib/display-category.ts +0 -24
- package/src/lib/drafts.test.ts +0 -218
- package/src/lib/drafts.ts +0 -122
- package/src/lib/error-classifier.test.ts +0 -434
- package/src/lib/error-classifier.ts +0 -260
- package/src/lib/escalation-label.test.ts +0 -49
- package/src/lib/escalation-label.ts +0 -32
- package/src/lib/fatal-error.test.ts +0 -78
- package/src/lib/fatal-error.ts +0 -165
- package/src/lib/filter-report.ts +0 -19
- package/src/lib/flagged-criteria.test.ts +0 -114
- package/src/lib/flagged-criteria.ts +0 -62
- package/src/lib/folder-failure.test.ts +0 -29
- package/src/lib/folder-failure.ts +0 -10
- package/src/lib/folder-roles.test.ts +0 -152
- package/src/lib/folder-roles.ts +0 -110
- package/src/lib/format.test.ts +0 -470
- package/src/lib/format.ts +0 -397
- package/src/lib/fresh-mailbox-count.test.ts +0 -145
- package/src/lib/fresh-mailbox-count.ts +0 -114
- package/src/lib/hot-sync-window.test.ts +0 -59
- package/src/lib/hot-sync-window.ts +0 -48
- package/src/lib/i18n.ts +0 -36
- package/src/lib/inbox-filters.test.ts +0 -134
- package/src/lib/inbox-filters.ts +0 -154
- package/src/lib/intelligence-pref.test.ts +0 -201
- package/src/lib/intelligence-pref.ts +0 -71
- package/src/lib/json.ts +0 -11
- package/src/lib/junk-destination.test.ts +0 -40
- package/src/lib/junk-destination.ts +0 -37
- package/src/lib/list-focus.test.ts +0 -25
- package/src/lib/list-focus.ts +0 -24
- package/src/lib/list-header-chrome.ts +0 -55
- package/src/lib/list-narrowing.test.ts +0 -88
- package/src/lib/list-narrowing.ts +0 -172
- package/src/lib/list-verb-request.test.ts +0 -124
- package/src/lib/list-verb-request.ts +0 -62
- package/src/lib/mail-context.ts +0 -91
- package/src/lib/mail-freshness.test.ts +0 -165
- package/src/lib/mail-freshness.tsx +0 -244
- package/src/lib/mail-route.test.ts +0 -261
- package/src/lib/mail-route.ts +0 -140
- package/src/lib/mail-search.ts +0 -69
- package/src/lib/mailbox-sync-wait.test.ts +0 -186
- package/src/lib/mailbox-sync-wait.ts +0 -102
- package/src/lib/message-attachments.test.ts +0 -163
- package/src/lib/message-attachments.ts +0 -70
- package/src/lib/message-body-source.test.ts +0 -115
- package/src/lib/message-body-source.ts +0 -51
- package/src/lib/move-options.test.ts +0 -154
- package/src/lib/move-options.ts +0 -60
- package/src/lib/move-targets.test.ts +0 -235
- package/src/lib/move-targets.ts +0 -70
- package/src/lib/network-error.ts +0 -74
- package/src/lib/new-folder.test.ts +0 -127
- package/src/lib/new-folder.ts +0 -59
- package/src/lib/onboarding-completion.test.ts +0 -48
- package/src/lib/onboarding-completion.ts +0 -23
- package/src/lib/organize/clause-suggestions.test.ts +0 -114
- package/src/lib/organize/clause-suggestions.ts +0 -89
- package/src/lib/organize/filter-edit-model.test.ts +0 -271
- package/src/lib/organize/filter-edit-model.ts +0 -129
- package/src/lib/organize/filter-run.test.ts +0 -79
- package/src/lib/organize/filter-run.ts +0 -48
- package/src/lib/organize/filter-status.test.ts +0 -120
- package/src/lib/organize/filter-status.ts +0 -115
- package/src/lib/organize/label-delete-copy.test.ts +0 -21
- package/src/lib/organize/label-delete-copy.ts +0 -22
- package/src/lib/organize/organize-model.test.ts +0 -209
- package/src/lib/organize/organize-model.ts +0 -198
- package/src/lib/organize/organize-poll.test.ts +0 -37
- package/src/lib/organize/organize-poll.ts +0 -28
- package/src/lib/organize/rule-model.test.ts +0 -211
- package/src/lib/organize/rule-model.ts +0 -140
- package/src/lib/organize/search-to-rule.test.ts +0 -142
- package/src/lib/organize/search-to-rule.ts +0 -105
- package/src/lib/outbox-search.test.ts +0 -75
- package/src/lib/outbox-search.ts +0 -58
- package/src/lib/outbox-status.test.ts +0 -79
- package/src/lib/outbox-status.ts +0 -79
- package/src/lib/provider-presets.test.ts +0 -51
- package/src/lib/provider-presets.ts +0 -94
- package/src/lib/quarantine-entries.test.ts +0 -77
- package/src/lib/quarantine-entries.ts +0 -46
- package/src/lib/query-error-handler.test.ts +0 -87
- package/src/lib/query-error-handler.ts +0 -41
- package/src/lib/query-escalation.integration.test.ts +0 -139
- package/src/lib/recent-searches.test.ts +0 -53
- package/src/lib/recent-searches.ts +0 -34
- package/src/lib/recipient-suggestions.test.ts +0 -109
- package/src/lib/recipient-suggestions.ts +0 -15
- package/src/lib/request-breadcrumbs.test.ts +0 -162
- package/src/lib/request-breadcrumbs.ts +0 -138
- package/src/lib/rescue-candidates.test.ts +0 -94
- package/src/lib/rescue-candidates.ts +0 -35
- package/src/lib/rescue-telemetry.ts +0 -55
- package/src/lib/result-count.test.ts +0 -97
- package/src/lib/result-count.ts +0 -57
- package/src/lib/result-folder.test.ts +0 -133
- package/src/lib/result-folder.ts +0 -111
- package/src/lib/route-breadcrumbs.test.ts +0 -41
- package/src/lib/route-breadcrumbs.ts +0 -45
- package/src/lib/route-search-query.test.ts +0 -70
- package/src/lib/row-settlement.ts +0 -28
- package/src/lib/rum-adapter.test.ts +0 -195
- package/src/lib/rum-adapter.ts +0 -107
- package/src/lib/search-conversion.ts +0 -23
- package/src/lib/search-params.test.ts +0 -77
- package/src/lib/search-params.ts +0 -59
- package/src/lib/search-query.test.ts +0 -24
- package/src/lib/search-query.ts +0 -11
- package/src/lib/search-result.test.ts +0 -20
- package/src/lib/search-result.ts +0 -55
- package/src/lib/search-scope.test.ts +0 -174
- package/src/lib/search-scope.ts +0 -140
- package/src/lib/search-suggestions.test.ts +0 -249
- package/src/lib/search-suggestions.ts +0 -296
- package/src/lib/search-surface.test.ts +0 -74
- package/src/lib/search-surface.ts +0 -34
- package/src/lib/search-token-index.test.ts +0 -232
- package/src/lib/search-token-index.ts +0 -120
- package/src/lib/search-tokens.test.ts +0 -454
- package/src/lib/search-tokens.ts +0 -319
- package/src/lib/search-view.test.ts +0 -320
- package/src/lib/search-view.ts +0 -97
- package/src/lib/selection-account-scope.ts +0 -40
- package/src/lib/selection-mode.test.ts +0 -34
- package/src/lib/selection-mode.ts +0 -24
- package/src/lib/self-update-state.test.ts +0 -552
- package/src/lib/self-update-state.ts +0 -658
- package/src/lib/sender-address.test.ts +0 -60
- package/src/lib/sender-address.ts +0 -36
- package/src/lib/session-storage.ts +0 -7
- package/src/lib/spam-offer.test.ts +0 -192
- package/src/lib/spam-offer.ts +0 -163
- package/src/lib/stale-build.test.ts +0 -52
- package/src/lib/stale-build.ts +0 -36
- package/src/lib/starred-rows.test.ts +0 -67
- package/src/lib/starred-rows.ts +0 -32
- package/src/lib/sync-warning-entries.ts +0 -33
- package/src/lib/telemetry-context.tsx +0 -9
- package/src/lib/telemetry.ts +0 -17
- package/src/lib/theme-preference.ts +0 -46
- package/src/lib/theme.ts +0 -33
- package/src/lib/thread-cache.test.ts +0 -65
- package/src/lib/thread-cache.ts +0 -76
- package/src/lib/thread-list-cache.test.ts +0 -147
- package/src/lib/thread-list-cache.ts +0 -119
- package/src/lib/thread-search-tokens.test.ts +0 -196
- package/src/lib/thread-search-tokens.ts +0 -177
- package/src/lib/wizard-selection.test.ts +0 -50
- package/src/lib/wizard-selection.ts +0 -43
- package/src/main.tsx +0 -10
- package/src/mocks/story-frame/AppStory.tsx +0 -62
- package/src/mocks/story-frame/calendar-window.ts +0 -21
- package/src/mocks/story-frame/compose-world.ts +0 -191
- package/src/mocks/story-frame/mail-handlers.ts +0 -556
- package/src/mocks/story-frame/mail-world.ts +0 -447
- package/src/mocks/story-frame/onboarding-handlers.ts +0 -97
- package/src/mocks/story-frame/session.tsx +0 -19
- package/src/mocks/story-frame/touch.ts +0 -22
- package/src/routeTree.gen.ts +0 -1279
- package/src/router.tsx +0 -59
- package/src/routes/__root.tsx +0 -92
- package/src/routes/calendar/$view.$date/$calendarObjectId/$recurrenceId.tsx +0 -26
- package/src/routes/calendar/$view.$date/$calendarObjectId/index.tsx +0 -18
- package/src/routes/calendar/$view.$date/$calendarObjectId.tsx +0 -15
- package/src/routes/calendar/$view.$date/index.tsx +0 -25
- package/src/routes/calendar/$view.$date/new.tsx +0 -20
- package/src/routes/calendar/$view.$date/suggestion.$suggestionId.tsx +0 -22
- package/src/routes/calendar/$view.$date.tsx +0 -170
- package/src/routes/calendar/-calendar-tree.test.ts +0 -285
- package/src/routes/calendar/index.tsx +0 -27
- package/src/routes/calendar.tsx +0 -99
- package/src/routes/import.tsx +0 -51
- package/src/routes/index.tsx +0 -7
- package/src/routes/mail/$mailboxId/$threadId/$messageId/$mode.{-$outboxMessageId}.tsx +0 -15
- package/src/routes/mail/$mailboxId/$threadId/$messageId.tsx +0 -23
- package/src/routes/mail/$mailboxId/$threadId/index.tsx +0 -14
- package/src/routes/mail/$mailboxId/$threadId.tsx +0 -12
- package/src/routes/mail/$mailboxId/compose.{-$outboxMessageId}.tsx +0 -14
- package/src/routes/mail/$mailboxId/index.tsx +0 -10
- package/src/routes/mail/$mailboxId.tsx +0 -38
- package/src/routes/mail/brief/$threadId/$messageId/$mode.{-$outboxMessageId}.tsx +0 -27
- package/src/routes/mail/brief/$threadId/$messageId.tsx +0 -23
- package/src/routes/mail/brief/$threadId/index.tsx +0 -14
- package/src/routes/mail/brief/$threadId.tsx +0 -16
- package/src/routes/mail/brief/compose.{-$outboxMessageId}.tsx +0 -22
- package/src/routes/mail/brief/index.tsx +0 -14
- package/src/routes/mail/brief.tsx +0 -52
- package/src/routes/mail/flagged/$threadId/$messageId/$mode.{-$outboxMessageId}.tsx +0 -15
- package/src/routes/mail/flagged/$threadId/$messageId.tsx +0 -23
- package/src/routes/mail/flagged/$threadId/index.tsx +0 -14
- package/src/routes/mail/flagged/$threadId.tsx +0 -16
- package/src/routes/mail/flagged/compose.{-$outboxMessageId}.tsx +0 -13
- package/src/routes/mail/flagged/index.tsx +0 -10
- package/src/routes/mail/flagged.tsx +0 -51
- package/src/routes/mail/index.tsx +0 -14
- package/src/routes/mail/outbox/compose.{-$outboxMessageId}.tsx +0 -17
- package/src/routes/mail/outbox/draft/$outboxMessageId.tsx +0 -19
- package/src/routes/mail/outbox/index.tsx +0 -10
- package/src/routes/mail/outbox.tsx +0 -32
- package/src/routes/mail.tsx +0 -262
- package/src/routes/onboarding.tsx +0 -47
- package/src/routes/settings/-accounts.test.ts +0 -340
- package/src/routes/settings/-filters.test.ts +0 -209
- package/src/routes/settings/-senders-remove-flag.render.test.ts +0 -105
- package/src/routes/settings/-shared/help-copy.tsx +0 -91
- package/src/routes/settings/accounts.tsx +0 -692
- package/src/routes/settings/advanced.tsx +0 -57
- package/src/routes/settings/appearance.tsx +0 -118
- package/src/routes/settings/calendars.tsx +0 -134
- package/src/routes/settings/filters.tsx +0 -259
- package/src/routes/settings/folders.tsx +0 -330
- package/src/routes/settings/index.tsx +0 -5
- package/src/routes/settings/labels.tsx +0 -242
- package/src/routes/settings/senders.tsx +0 -444
- package/src/routes/settings/suggested-vips.tsx +0 -10
- package/src/routes/settings/warnings.tsx +0 -36
- package/src/routes/settings.tsx +0 -87
- package/src/routing/browsed-list.ts +0 -76
- package/src/routing/calendar-fragment.test.ts +0 -66
- package/src/routing/calendar.ts +0 -250
- package/src/routing/compose-press-opens.render.test.ts +0 -179
- package/src/routing/compose.ts +0 -181
- package/src/routing/fragment.render.test.ts +0 -98
- package/src/routing/fragment.test.ts +0 -113
- package/src/routing/fragment.ts +0 -145
- package/src/routing/index.ts +0 -93
- package/src/routing/nav-link.tsx +0 -64
- package/src/routing/nav-selection.ts +0 -26
- package/src/routing/open-thread.ts +0 -157
- package/src/routing/outbox-draft.ts +0 -44
- package/src/routing/reply.ts +0 -335
- package/src/routing/search-field.render.test.ts +0 -216
- package/src/routing/search-field.ts +0 -85
- package/src/routing/search-mirror-convergence.render.test.ts +0 -198
- package/src/routing/search-mirror-detail.render.test.ts +0 -226
- package/src/routing/search-mirror.ts +0 -130
- package/src/routing/search-navigation.ts +0 -43
- package/src/routing/sections.ts +0 -55
- package/src/routing/wizard-history.test.ts +0 -163
- package/src/routing/wizard-history.ts +0 -219
- package/src/runtime-config.test.ts +0 -43
- package/src/runtime-config.ts +0 -104
- package/src/shell/index.tsx +0 -101
- package/src/test-support/bulk-run.ts +0 -13
- package/src/test-support/dom.ts +0 -232
- package/src/test-support/fixtures.ts +0 -109
- package/src/test-support/http.ts +0 -82
- package/src/test-support/intelligence-surface.ts +0 -42
- package/src/test-support/list-search-binding.ts +0 -34
- package/src/test-support/test-bundle-app.ts +0 -102
- package/src/test-support/thread-router.ts +0 -54
- package/vite.base.ts +0 -61
- /package/{src → dist/src}/auth/auth.css +0 -0
- /package/{src → dist/src}/auth/cognito/cognito.css +0 -0
- /package/{src → dist/src}/vite-env.d.ts +0 -0
|
@@ -1,1078 +0,0 @@
|
|
|
1
|
-
import { mailboxOperationsListMailboxesOptions } from "@remit/api-http-client/@tanstack/react-query.gen.ts";
|
|
2
|
-
import type { RemitImapAccountResponse } from "@remit/api-http-client/types.gen.ts";
|
|
3
|
-
import {
|
|
4
|
-
type ClauseDraft,
|
|
5
|
-
type ClauseEditState,
|
|
6
|
-
derivePropertyClauses,
|
|
7
|
-
dominantSender,
|
|
8
|
-
type FolderTreeNode,
|
|
9
|
-
type MatchCount,
|
|
10
|
-
type MatchDoor,
|
|
11
|
-
type MatchMode,
|
|
12
|
-
type RuleClause,
|
|
13
|
-
type RunState,
|
|
14
|
-
ruleRestrictionFor,
|
|
15
|
-
type SearchConversion,
|
|
16
|
-
type SelectionRestriction,
|
|
17
|
-
SelectionWizard,
|
|
18
|
-
type StepId,
|
|
19
|
-
searchConversionNotice,
|
|
20
|
-
senderLabel,
|
|
21
|
-
stepBlockedReason,
|
|
22
|
-
stepIndex,
|
|
23
|
-
stepsFor,
|
|
24
|
-
suggestRuleName,
|
|
25
|
-
useOverlayScope,
|
|
26
|
-
type Verb,
|
|
27
|
-
type WizardDraft,
|
|
28
|
-
type WizardMessage,
|
|
29
|
-
wizardScopeFor,
|
|
30
|
-
} from "@remit/ui";
|
|
31
|
-
import { useQuery } from "@tanstack/react-query";
|
|
32
|
-
import { useBlocker } from "@tanstack/react-router";
|
|
33
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
34
|
-
import {
|
|
35
|
-
useFolderAppointments,
|
|
36
|
-
useInboxMailbox,
|
|
37
|
-
useJunkMailbox,
|
|
38
|
-
} from "@/hooks/useArchiveMailbox";
|
|
39
|
-
import { useClauseSuggestions } from "@/hooks/useClauseSuggestions";
|
|
40
|
-
import { useCreateMailbox } from "@/hooks/useCreateMailbox";
|
|
41
|
-
import {
|
|
42
|
-
type EscalationSearchQuery,
|
|
43
|
-
useEscalatedActions,
|
|
44
|
-
} from "@/hooks/useEscalatedActions";
|
|
45
|
-
import { useCreateFilter } from "@/hooks/useFilters";
|
|
46
|
-
import { useFolderLabelTranslator } from "@/hooks/useFolderLabelTranslator";
|
|
47
|
-
import { useMatchSample, useSearchMatchSample } from "@/hooks/useMatchSample";
|
|
48
|
-
import { useOrganizeJob } from "@/hooks/useOrganizeJob";
|
|
49
|
-
import { useRulePreview } from "@/hooks/useRulePreview";
|
|
50
|
-
import { useSelectedSubjects } from "@/hooks/useSelectedSubjects";
|
|
51
|
-
import type {
|
|
52
|
-
BulkActionProgress,
|
|
53
|
-
BulkActionTarget,
|
|
54
|
-
BulkRunOutcome,
|
|
55
|
-
BulkRunStart,
|
|
56
|
-
EscalatedAction,
|
|
57
|
-
} from "@/lib/bulk-actions";
|
|
58
|
-
import { NO_JUNK_FOLDER_REASON } from "@/lib/junk-destination";
|
|
59
|
-
import { useMailContext } from "@/lib/mail-context";
|
|
60
|
-
import { buildMoveOptions, folderDelimiter } from "@/lib/move-options";
|
|
61
|
-
import {
|
|
62
|
-
buildWizardDraft,
|
|
63
|
-
type OrganizeMatchPredicate,
|
|
64
|
-
type OrganizeScope,
|
|
65
|
-
organizeScopeFor,
|
|
66
|
-
} from "@/lib/organize/organize-model";
|
|
67
|
-
import {
|
|
68
|
-
normalizeClauseValue,
|
|
69
|
-
SUPPORTED_CLAUSE_FIELDS,
|
|
70
|
-
} from "@/lib/organize/rule-model";
|
|
71
|
-
import { searchRuleAccountId } from "@/lib/organize/search-to-rule";
|
|
72
|
-
import { useSearchConversion } from "@/lib/search-conversion";
|
|
73
|
-
import type { WizardSelectionMessage } from "@/lib/wizard-selection";
|
|
74
|
-
import { useWizardEntryValue, useWizardStep } from "@/routing";
|
|
75
|
-
import { bulkRunReport } from "./bulk-run-state";
|
|
76
|
-
import { organizeRunState } from "./organize-run-state";
|
|
77
|
-
import {
|
|
78
|
-
retryIntent,
|
|
79
|
-
runIsInFlight,
|
|
80
|
-
stopRunner,
|
|
81
|
-
wizardExit,
|
|
82
|
-
} from "./selection-wizard-run-controls";
|
|
83
|
-
|
|
84
|
-
const EMPTY_DRAFT: WizardDraft = { clauses: [], matchOperator: "any" };
|
|
85
|
-
|
|
86
|
-
interface SelectionWizardSessionProps extends SelectionWizardHostProps {
|
|
87
|
-
/** The step the URL holds. The session is mounted only while there is one. */
|
|
88
|
-
step: StepId;
|
|
89
|
-
goToStep: (step: StepId) => void;
|
|
90
|
-
goBack: () => void;
|
|
91
|
-
closeWizard: (steps: readonly StepId[], step: StepId) => void;
|
|
92
|
-
/**
|
|
93
|
-
* The wizard was entered by converting a search rather than by ticking rows
|
|
94
|
-
* (#477 1.8). The conversion seeds the clauses on the properties step and the
|
|
95
|
-
* notice above them, and nothing else: every step after that is the one a
|
|
96
|
-
* selection from the inbox walks (#477 3.4). Absent for the selection bar's
|
|
97
|
-
* entry.
|
|
98
|
-
*/
|
|
99
|
-
searchConversion?: SearchConversion;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* The selection the list escalated to a predicate — every message matching the
|
|
104
|
-
* query it is showing, rather than the rows on screen (#508). The wizard walks
|
|
105
|
-
* it exactly as it walks a ticked selection: the same screens, the same review
|
|
106
|
-
* before anything is sent. What differs is that the match has no member list,
|
|
107
|
-
* so the count and the sample both come from the server that resolved it.
|
|
108
|
-
*/
|
|
109
|
-
export interface EscalatedSelection {
|
|
110
|
-
/** What the predicate covers, in the words the list escalated it with. */
|
|
111
|
-
scope: string;
|
|
112
|
-
/** The server's count of the whole match, which the run is offered against. */
|
|
113
|
-
total: number;
|
|
114
|
-
/** The predicate itself, which the sample and the run both re-resolve. */
|
|
115
|
-
searchQuery: EscalationSearchQuery;
|
|
116
|
-
/**
|
|
117
|
-
* Runs one verb over the whole predicate, paging it server-side. The chunked
|
|
118
|
-
* runner the list already owns: the run screen drives it, and the review
|
|
119
|
-
* screen is what now stands in front of it. The run belongs to the list, so
|
|
120
|
-
* it survives the wizard closing over it — as the run screen promises.
|
|
121
|
-
*/
|
|
122
|
-
run: (
|
|
123
|
-
action: EscalatedAction,
|
|
124
|
-
/**
|
|
125
|
-
* Handed the release for the ending of the run it starts, so the wizard's
|
|
126
|
-
* run screen states that ending in place and the list does not banner it a
|
|
127
|
-
* second time (#112).
|
|
128
|
-
*/
|
|
129
|
-
claimEnding: (release: () => void) => void,
|
|
130
|
-
) => Promise<BulkRunStart>;
|
|
131
|
-
/** Ends that run at the next page boundary, which leaving the wizard does not. */
|
|
132
|
-
stop: () => void;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export interface SelectionWizardHostProps {
|
|
136
|
-
/** What the bar was pressed for. Every verb walks the same wizard. */
|
|
137
|
-
verb: Verb;
|
|
138
|
-
/** The account the ticked rows belong to, absent when they span several. */
|
|
139
|
-
accountId?: string;
|
|
140
|
-
/** Where the selection was made, so a run invalidates the listing it changed. */
|
|
141
|
-
mailboxId?: string;
|
|
142
|
-
/** That mailbox in the user's words, for a commit refused while it runs. */
|
|
143
|
-
mailboxLabel?: string;
|
|
144
|
-
selection: readonly WizardSelectionMessage[];
|
|
145
|
-
/**
|
|
146
|
-
* Which scope the ticked rows span more of than the folder and rule steps can
|
|
147
|
-
* take. The surface that resolved the selection knows which of the two it is,
|
|
148
|
-
* and the wizard states that one (#525).
|
|
149
|
-
*/
|
|
150
|
-
selectionRestriction?: SelectionRestriction;
|
|
151
|
-
/** Present when the selection is a predicate rather than the ticked rows. */
|
|
152
|
-
escalated?: EscalatedSelection;
|
|
153
|
-
/**
|
|
154
|
-
* How far the escalated runner has got. Read live and passed apart from
|
|
155
|
-
* {@link EscalatedSelection}, which the wizard holds for the whole walk: the
|
|
156
|
-
* list's escalation returns to idle when a run ends, so a progress reading
|
|
157
|
-
* taken off the held predicate would be frozen at `undefined` for every
|
|
158
|
-
* retry after the first and the bar would never move.
|
|
159
|
-
*/
|
|
160
|
-
escalatedProgress?: BulkActionProgress;
|
|
161
|
-
/** The wizard is done with the selection, and the list drops it. */
|
|
162
|
-
onFinished: () => void;
|
|
163
|
-
/**
|
|
164
|
-
* How a run ended, once no screen reporting on it is left. Handed to the run's
|
|
165
|
-
* owner rather than called here: the run screen invites the user to close it
|
|
166
|
-
* and keep the run going, and leaving the mailbox on top of that takes this
|
|
167
|
-
* component with it — so the ending is stated by something that outlives both
|
|
168
|
-
* (#112). A run screen still up reports in place instead.
|
|
169
|
-
*/
|
|
170
|
-
onRunEnded?: (
|
|
171
|
-
kind: EscalatedAction["kind"],
|
|
172
|
-
matched: number,
|
|
173
|
-
outcome: BulkRunOutcome,
|
|
174
|
-
) => void;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* A search entry with no query behind it — a link typed by hand, or one whose
|
|
179
|
-
* query is gone. It opens the same properties step with nothing seeded, which
|
|
180
|
-
* the step already states, rather than a wizard that renders nothing.
|
|
181
|
-
*/
|
|
182
|
-
const NO_CONVERSION: SearchConversion = {
|
|
183
|
-
clauses: [],
|
|
184
|
-
matchOperator: "all",
|
|
185
|
-
droppedFacets: [],
|
|
186
|
-
keptTerms: false,
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
/** A search entry has nothing ticked; its match is the query's clauses (#477 3.2). */
|
|
190
|
-
const EMPTY_SELECTION: readonly WizardSelectionMessage[] = [];
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* What a search entry overrides on the props the surface handed over. Its rule
|
|
194
|
-
* belongs to the account the surface named, and to the one the query names when
|
|
195
|
-
* it names one (#524) — reaching past both for the first configured account
|
|
196
|
-
* writes the rule against whichever account happens to be first in the list, and
|
|
197
|
-
* the mail the user was looking at is never filtered.
|
|
198
|
-
*/
|
|
199
|
-
export const searchEntryOverrides = (
|
|
200
|
-
conversion: SearchConversion,
|
|
201
|
-
props: Pick<SelectionWizardHostProps, "accountId">,
|
|
202
|
-
accounts: readonly Pick<RemitImapAccountResponse, "accountId">[],
|
|
203
|
-
): Pick<
|
|
204
|
-
SelectionWizardSessionProps,
|
|
205
|
-
| "verb"
|
|
206
|
-
| "accountId"
|
|
207
|
-
| "selection"
|
|
208
|
-
| "selectionRestriction"
|
|
209
|
-
| "escalated"
|
|
210
|
-
| "searchConversion"
|
|
211
|
-
> => ({
|
|
212
|
-
verb: "organize",
|
|
213
|
-
accountId: searchRuleAccountId(conversion, props.accountId, accounts),
|
|
214
|
-
selection: EMPTY_SELECTION,
|
|
215
|
-
selectionRestriction: undefined,
|
|
216
|
-
escalated: undefined,
|
|
217
|
-
searchConversion: conversion,
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
/** How far a commit has got, whichever of the three ways it took. */
|
|
221
|
-
interface RunSnapshot {
|
|
222
|
-
state: RunState;
|
|
223
|
-
matched: number;
|
|
224
|
-
applied: number;
|
|
225
|
-
failed: number;
|
|
226
|
-
failures: readonly WizardMessage[];
|
|
227
|
-
/**
|
|
228
|
-
* Why a commit never started, when the reason is one the same commit cannot
|
|
229
|
-
* get past. Carried to the run screen, which states it and offers no retry
|
|
230
|
-
* (#522).
|
|
231
|
-
*/
|
|
232
|
-
failureReason?: string;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const NOT_STARTED: RunSnapshot = {
|
|
236
|
-
state: "saving",
|
|
237
|
-
matched: 0,
|
|
238
|
-
applied: 0,
|
|
239
|
-
failed: 0,
|
|
240
|
-
failures: [],
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
const withIds = (
|
|
244
|
-
clauses: readonly Omit<RuleClause, "id">[],
|
|
245
|
-
prefix: string,
|
|
246
|
-
): RuleClause[] =>
|
|
247
|
-
clauses.map((clause, index) => ({ ...clause, id: `${prefix}-${index}` }));
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* The bulk call a verb makes over a concrete list of ids. Junk is a move: the
|
|
251
|
-
* message-flags API has no `$Junk` field, so the Junk verb files into the
|
|
252
|
-
* account's appointed Junk mailbox, and Move and Organize into the folder the
|
|
253
|
-
* folder step chose.
|
|
254
|
-
*/
|
|
255
|
-
const bulkActionFor = (
|
|
256
|
-
verb: Verb,
|
|
257
|
-
moveMailboxId: string | undefined,
|
|
258
|
-
junkMailboxId: string | undefined,
|
|
259
|
-
): EscalatedAction | undefined => {
|
|
260
|
-
if (verb === "delete") return { kind: "delete" };
|
|
261
|
-
if (verb === "markRead") return { kind: "markRead" };
|
|
262
|
-
const destinationMailboxId = verb === "junk" ? junkMailboxId : moveMailboxId;
|
|
263
|
-
return destinationMailboxId
|
|
264
|
-
? { kind: "move", destinationMailboxId }
|
|
265
|
-
: undefined;
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Whether the properties match is applied by the server's own pass rather than over
|
|
270
|
-
* the ids it matched. The back-apply job carries a move and nothing else, so
|
|
271
|
-
* Move, Junk and Organize hand it the whole match; Delete and Mark read have no
|
|
272
|
-
* server-side pass and act on the ids the preview matched.
|
|
273
|
-
*/
|
|
274
|
-
const widenedRunsAsJob = (verb: Verb): boolean =>
|
|
275
|
-
verb === "move" || verb === "junk" || verb === "organize";
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* The commit pressed with nowhere for the mail to go. A verb that files mail
|
|
279
|
-
* needs a destination, and reaching the run screen without one is a failure the
|
|
280
|
-
* screen states along with the way out of it — never a control that does
|
|
281
|
-
* nothing, and never a retry that re-sends the same commit to the same absence.
|
|
282
|
-
*/
|
|
283
|
-
const noDestinationReason = (verb: Verb): string =>
|
|
284
|
-
verb === "junk"
|
|
285
|
-
? NO_JUNK_FOLDER_REASON
|
|
286
|
-
: "No destination was chosen, so there is nowhere to file these. Go back and pick a folder.";
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Where the wizard meets the app (#483). The steps and their bodies belong to
|
|
290
|
-
* `@remit/ui`; everything that talks to a server is here: the live count, the folder create, the bulk call, the back-apply job and the filter.
|
|
291
|
-
*
|
|
292
|
-
* Every commit routes through `organize-model.ts`, so the four `OrganizeScope`
|
|
293
|
-
* values are reconstructed in one place from the two answers the wizard asks
|
|
294
|
-
* for — what the action covers, and how long it holds.
|
|
295
|
-
*
|
|
296
|
-
* One walk of the wizard, and only that. Everything the walk answers — the door,
|
|
297
|
-
* the draft, whether a commit has been sent — lives here rather than in the host
|
|
298
|
-
* that mounts it, so closing the wizard takes all of it with the screen. Held a
|
|
299
|
-
* level up, on a component the list mounts for as long as it is on screen, the
|
|
300
|
-
* first commit's guard would still be up when the next selection reached Review,
|
|
301
|
-
* and the second one would press a control that does nothing at all.
|
|
302
|
-
*/
|
|
303
|
-
function SelectionWizardSession({
|
|
304
|
-
verb,
|
|
305
|
-
accountId,
|
|
306
|
-
mailboxId,
|
|
307
|
-
mailboxLabel,
|
|
308
|
-
selection,
|
|
309
|
-
selectionRestriction,
|
|
310
|
-
escalated: escalatedSelection,
|
|
311
|
-
escalatedProgress,
|
|
312
|
-
searchConversion,
|
|
313
|
-
onFinished,
|
|
314
|
-
onRunEnded,
|
|
315
|
-
step,
|
|
316
|
-
goToStep,
|
|
317
|
-
goBack,
|
|
318
|
-
closeWizard,
|
|
319
|
-
}: SelectionWizardSessionProps) {
|
|
320
|
-
// The query as it read when the wizard opened. Held for the walk, so a search
|
|
321
|
-
// still settling underneath cannot rewrite the notice a user is reading while
|
|
322
|
-
// the clauses beside it stay as they were seeded.
|
|
323
|
-
const [conversion] = useState(() => searchConversion);
|
|
324
|
-
// The predicate this walk is for, held for the walk. The list's escalation
|
|
325
|
-
// returns to idle the moment a run ends, and a wizard reading it live would
|
|
326
|
-
// lose the match its run screen is reporting on — and would offer a retry over
|
|
327
|
-
// the loaded rows instead of over the predicate.
|
|
328
|
-
const [escalated] = useState(() => escalatedSelection);
|
|
329
|
-
const fromSearch = conversion !== undefined;
|
|
330
|
-
// The door the wizard is on. An escalated predicate is not one of them and is
|
|
331
|
-
// not held here: it is a property of the selection the list handed over, so
|
|
332
|
-
// the mode below is derived rather than settable. No screen can escalate a
|
|
333
|
-
// selection, and the commit path can be typed to the doors.
|
|
334
|
-
const [door, setDoor] = useState<MatchDoor>(
|
|
335
|
-
fromSearch ? "properties" : "selected",
|
|
336
|
-
);
|
|
337
|
-
const mode: MatchMode = escalated ? "escalated" : door;
|
|
338
|
-
const [draft, setDraft] = useState<WizardDraft>(() =>
|
|
339
|
-
conversion
|
|
340
|
-
? {
|
|
341
|
-
clauses: withIds(conversion.clauses, "search"),
|
|
342
|
-
matchOperator: conversion.matchOperator,
|
|
343
|
-
}
|
|
344
|
-
: EMPTY_DRAFT,
|
|
345
|
-
);
|
|
346
|
-
const [clauseEdit, setClauseEdit] = useState<ClauseEditState | undefined>(
|
|
347
|
-
undefined,
|
|
348
|
-
);
|
|
349
|
-
const [nudgedStep, setNudgedStep] = useState<StepId | undefined>(undefined);
|
|
350
|
-
const [committedScope, setCommittedScope] = useState<
|
|
351
|
-
OrganizeScope | undefined
|
|
352
|
-
>(undefined);
|
|
353
|
-
const [bulkRun, setBulkRun] = useState<
|
|
354
|
-
| {
|
|
355
|
-
matched: number;
|
|
356
|
-
/** What the run was sent, so a retry of what it missed keeps each
|
|
357
|
-
* id's account. Empty for an escalated run, which has no id list. */
|
|
358
|
-
sent: readonly BulkActionTarget[];
|
|
359
|
-
outcome?: BulkRunOutcome;
|
|
360
|
-
failureReason?: string;
|
|
361
|
-
}
|
|
362
|
-
| undefined
|
|
363
|
-
>(undefined);
|
|
364
|
-
const commitSent = useRef(false);
|
|
365
|
-
|
|
366
|
-
const messageIds = useMemo(
|
|
367
|
-
() => selection.map((message) => message.id),
|
|
368
|
-
[selection],
|
|
369
|
-
);
|
|
370
|
-
// What a bulk run over the ticked rows covers, each row still naming its
|
|
371
|
-
// account so the run can batch per account.
|
|
372
|
-
const bulkTargets = useMemo<BulkActionTarget[]>(
|
|
373
|
-
() =>
|
|
374
|
-
selection.map((message) => ({
|
|
375
|
-
id: message.id,
|
|
376
|
-
accountId: message.accountId,
|
|
377
|
-
})),
|
|
378
|
-
[selection],
|
|
379
|
-
);
|
|
380
|
-
const senders = useMemo(
|
|
381
|
-
() => selection.map((message) => message.email).filter(Boolean),
|
|
382
|
-
[selection],
|
|
383
|
-
);
|
|
384
|
-
const subjects = useSelectedSubjects(messageIds);
|
|
385
|
-
const { junkMailboxId } = useJunkMailbox(accountId);
|
|
386
|
-
const { inboxMailboxId } = useInboxMailbox(accountId);
|
|
387
|
-
// A saved rule's first pass runs over the inbox. Ticked rows in any other
|
|
388
|
-
// folder take the action directly, so a rule made from Archive or from a
|
|
389
|
-
// search across folders still files the mail it was made from.
|
|
390
|
-
const outsideInbox = useMemo<BulkActionTarget[]>(
|
|
391
|
-
() =>
|
|
392
|
-
inboxMailboxId
|
|
393
|
-
? selection
|
|
394
|
-
.filter(
|
|
395
|
-
(message) =>
|
|
396
|
-
message.mailboxId !== undefined &&
|
|
397
|
-
message.mailboxId !== inboxMailboxId,
|
|
398
|
-
)
|
|
399
|
-
.map((message) => ({
|
|
400
|
-
id: message.id,
|
|
401
|
-
accountId: message.accountId,
|
|
402
|
-
}))
|
|
403
|
-
: [],
|
|
404
|
-
[selection, inboxMailboxId],
|
|
405
|
-
);
|
|
406
|
-
|
|
407
|
-
// A door the wizard resolves itself, through the preview endpoint. The
|
|
408
|
-
// escalated predicate is resolved by the list before the wizard opens, and
|
|
409
|
-
// the ticked list is its own answer, so neither is previewed.
|
|
410
|
-
const previewed = mode === "properties";
|
|
411
|
-
const predicate: OrganizeMatchPredicate = useMemo(
|
|
412
|
-
() => ({
|
|
413
|
-
matchOperator: draft.matchOperator === "all" ? "And" : "Or",
|
|
414
|
-
literalClauses: draft.clauses.map((clause) => ({
|
|
415
|
-
field: clause.field,
|
|
416
|
-
value: clause.value,
|
|
417
|
-
})),
|
|
418
|
-
}),
|
|
419
|
-
[draft.clauses, draft.matchOperator],
|
|
420
|
-
);
|
|
421
|
-
// The count and the ids both come from the server, never from paging the list
|
|
422
|
-
// in the browser (#477 5.3). The ticked list is its own count, so no request
|
|
423
|
-
// is made for it.
|
|
424
|
-
const { count: previewCount, matchedIds } = useRulePreview(
|
|
425
|
-
previewed ? accountId : undefined,
|
|
426
|
-
predicate,
|
|
427
|
-
);
|
|
428
|
-
const matchSample = useMatchSample(previewed ? matchedIds : []);
|
|
429
|
-
// The escalated match's own members, read from the search that resolved it.
|
|
430
|
-
const escalatedSample = useSearchMatchSample(
|
|
431
|
-
escalated ? mailboxId : undefined,
|
|
432
|
-
escalated?.searchQuery,
|
|
433
|
-
);
|
|
434
|
-
|
|
435
|
-
const count: MatchCount = escalated
|
|
436
|
-
? { status: "ready", count: escalated.total }
|
|
437
|
-
: previewed
|
|
438
|
-
? previewCount
|
|
439
|
-
: { status: "ready", count: selection.length };
|
|
440
|
-
|
|
441
|
-
const { data: mailboxesData } = useQuery({
|
|
442
|
-
...mailboxOperationsListMailboxesOptions({
|
|
443
|
-
path: { accountId: accountId ?? "" },
|
|
444
|
-
}),
|
|
445
|
-
enabled: !!accountId,
|
|
446
|
-
staleTime: Number.POSITIVE_INFINITY,
|
|
447
|
-
});
|
|
448
|
-
const folderAppointments = useFolderAppointments(accountId);
|
|
449
|
-
const translator = useFolderLabelTranslator();
|
|
450
|
-
const mailboxes = useMemo<FolderTreeNode[]>(
|
|
451
|
-
() =>
|
|
452
|
-
buildMoveOptions({
|
|
453
|
-
mailboxes: mailboxesData?.items ?? [],
|
|
454
|
-
folderAppointments,
|
|
455
|
-
currentMailboxId: mailboxId,
|
|
456
|
-
translator,
|
|
457
|
-
}),
|
|
458
|
-
[mailboxesData?.items, folderAppointments, mailboxId, translator],
|
|
459
|
-
);
|
|
460
|
-
const { createFolderIn } = useCreateMailbox(accountId);
|
|
461
|
-
|
|
462
|
-
const folderLabel = mailboxes.find(
|
|
463
|
-
(mailbox) => mailbox.id === draft.moveMailboxId,
|
|
464
|
-
)?.label;
|
|
465
|
-
const leadSender = dominantSender(
|
|
466
|
-
selection.map((message) => ({
|
|
467
|
-
normalizedEmail: message.email,
|
|
468
|
-
displayName: message.sender,
|
|
469
|
-
})),
|
|
470
|
-
);
|
|
471
|
-
const suggestedName = suggestRuleName({
|
|
472
|
-
match:
|
|
473
|
-
mode === "properties"
|
|
474
|
-
? draft.clauses[0]?.value.trim() || undefined
|
|
475
|
-
: undefined,
|
|
476
|
-
sender: leadSender ? senderLabel(leadSender) : undefined,
|
|
477
|
-
folder: folderLabel,
|
|
478
|
-
});
|
|
479
|
-
// The name the rule commits under: what the user typed, or the suggestion the
|
|
480
|
-
// field is showing them. The two must be the same string, or Continue blocks
|
|
481
|
-
// on a name that is on screen.
|
|
482
|
-
const named = useMemo<WizardDraft>(
|
|
483
|
-
() => ({ ...draft, name: draft.name ?? suggestedName }),
|
|
484
|
-
[draft, suggestedName],
|
|
485
|
-
);
|
|
486
|
-
|
|
487
|
-
const clauseSuggestions = useClauseSuggestions(
|
|
488
|
-
clauseEdit?.draft.field,
|
|
489
|
-
clauseEdit?.draft.value ?? "",
|
|
490
|
-
senders,
|
|
491
|
-
);
|
|
492
|
-
|
|
493
|
-
// While this screen is up it states the ending itself, so the run's owner
|
|
494
|
-
// holds its banner back. The claim is over the run this screen starts and no
|
|
495
|
-
// other: a commit that starts none — a filter, a back-apply job — has no
|
|
496
|
-
// ending of its own to hold, and holding one anyway swallowed the banner of
|
|
497
|
-
// whatever run was going elsewhere. Leaving — closing the wizard, or leaving
|
|
498
|
-
// the mailbox altogether — unmounts this and releases it, and the ending is
|
|
499
|
-
// bannered where the user now is (#112, #521).
|
|
500
|
-
const releaseReport = useRef<(() => void) | undefined>(undefined);
|
|
501
|
-
const claimEnding = useCallback((release: () => void) => {
|
|
502
|
-
releaseReport.current?.();
|
|
503
|
-
releaseReport.current = release;
|
|
504
|
-
}, []);
|
|
505
|
-
useEffect(
|
|
506
|
-
() => () => {
|
|
507
|
-
releaseReport.current?.();
|
|
508
|
-
releaseReport.current = undefined;
|
|
509
|
-
},
|
|
510
|
-
[],
|
|
511
|
-
);
|
|
512
|
-
|
|
513
|
-
const organizeJob = useOrganizeJob(accountId);
|
|
514
|
-
const createFilter = useCreateFilter(accountId);
|
|
515
|
-
const bulk = useEscalatedActions({
|
|
516
|
-
mailboxId: mailboxId ?? "",
|
|
517
|
-
mailboxLabel,
|
|
518
|
-
accountId,
|
|
519
|
-
enabled: false,
|
|
520
|
-
predicateKey: "selection-wizard",
|
|
521
|
-
searchQuery: {},
|
|
522
|
-
reportEnding: onRunEnded,
|
|
523
|
-
});
|
|
524
|
-
const { runAction } = bulk;
|
|
525
|
-
|
|
526
|
-
const steps = stepsFor({ verb, mode, scope: draft.scope, fromSearch });
|
|
527
|
-
// The step the screens are on, which is the held one only while the answers
|
|
528
|
-
// still hold it. Reading the URL's step here and the resolved one on screen
|
|
529
|
-
// is how a footer comes to name a screen nobody is looking at.
|
|
530
|
-
const current = steps[stepIndex(steps, step)];
|
|
531
|
-
|
|
532
|
-
// A filter, a folder, and the preview that counts the properties door all
|
|
533
|
-
// belong to one account, so a selection spanning accounts reaches none of them
|
|
534
|
-
// and is told so on the step that asks (#477 5.5, #523). A selection spanning
|
|
535
|
-
// folders of one account is told about folders instead, and keeps its account:
|
|
536
|
-
// the preview behind the properties door has something to count against. The one-off
|
|
537
|
-
// scope and the ticked rows act on the messages themselves and are unaffected.
|
|
538
|
-
const wizardScope = wizardScopeFor(accountId, selectionRestriction);
|
|
539
|
-
// An escalated match is restricted on the same step for its own reason: the
|
|
540
|
-
// list resolved it before the wizard opened, and no door on the match step can
|
|
541
|
-
// give it a predicate to keep matching on (#1193).
|
|
542
|
-
const ruleRestriction = ruleRestrictionFor(mode, wizardScope);
|
|
543
|
-
const restrictionFor = (step: StepId): string | undefined => {
|
|
544
|
-
if (step === "folder") return wizardScope.destination;
|
|
545
|
-
if (step !== "rule") return undefined;
|
|
546
|
-
return named.scope === "standing" || named.scope === "until"
|
|
547
|
-
? ruleRestriction
|
|
548
|
-
: undefined;
|
|
549
|
-
};
|
|
550
|
-
const blockedReason =
|
|
551
|
-
restrictionFor(current) ?? stepBlockedReason(current, named, count);
|
|
552
|
-
|
|
553
|
-
const seedPropertyClauses = useCallback(
|
|
554
|
-
() => withIds(derivePropertyClauses(senders, subjects), "seed"),
|
|
555
|
-
[senders, subjects],
|
|
556
|
-
);
|
|
557
|
-
|
|
558
|
-
const changeMode = useCallback(
|
|
559
|
-
(next: MatchDoor) => {
|
|
560
|
-
setDoor(next);
|
|
561
|
-
setDraft((held) =>
|
|
562
|
-
next === "properties" && held.clauses.length === 0
|
|
563
|
-
? { ...held, clauses: seedPropertyClauses() }
|
|
564
|
-
: held,
|
|
565
|
-
);
|
|
566
|
-
},
|
|
567
|
-
[seedPropertyClauses],
|
|
568
|
-
);
|
|
569
|
-
|
|
570
|
-
const startAddClause = useCallback(() => {
|
|
571
|
-
setClauseEdit({ mode: "add", draft: { field: "From", value: "" } });
|
|
572
|
-
}, []);
|
|
573
|
-
|
|
574
|
-
const startEditClause = useCallback(
|
|
575
|
-
(clauseId: string) => {
|
|
576
|
-
const clause = draft.clauses.find((held) => held.id === clauseId);
|
|
577
|
-
if (!clause) return;
|
|
578
|
-
setClauseEdit({
|
|
579
|
-
mode: "edit",
|
|
580
|
-
clauseId,
|
|
581
|
-
draft: { field: clause.field, value: clause.value },
|
|
582
|
-
});
|
|
583
|
-
},
|
|
584
|
-
[draft.clauses],
|
|
585
|
-
);
|
|
586
|
-
|
|
587
|
-
const removeClause = useCallback((clauseId: string) => {
|
|
588
|
-
setDraft((held) => ({
|
|
589
|
-
...held,
|
|
590
|
-
clauses: held.clauses.filter((clause) => clause.id !== clauseId),
|
|
591
|
-
}));
|
|
592
|
-
}, []);
|
|
593
|
-
|
|
594
|
-
const changeClauseDraft = useCallback((next: ClauseDraft) => {
|
|
595
|
-
setClauseEdit((edit) => edit && { ...edit, draft: next });
|
|
596
|
-
}, []);
|
|
597
|
-
|
|
598
|
-
const submitClause = useCallback(() => {
|
|
599
|
-
setClauseEdit((edit) => {
|
|
600
|
-
if (!edit) return undefined;
|
|
601
|
-
const value = normalizeClauseValue(edit.draft.field, edit.draft.value);
|
|
602
|
-
const next = { ...edit.draft, value };
|
|
603
|
-
setDraft((held) => ({
|
|
604
|
-
...held,
|
|
605
|
-
clauses: edit.clauseId
|
|
606
|
-
? held.clauses.map((clause) =>
|
|
607
|
-
clause.id === edit.clauseId ? { ...clause, ...next } : clause,
|
|
608
|
-
)
|
|
609
|
-
: [...held.clauses, { id: crypto.randomUUID(), ...next }],
|
|
610
|
-
}));
|
|
611
|
-
return undefined;
|
|
612
|
-
});
|
|
613
|
-
}, []);
|
|
614
|
-
|
|
615
|
-
const advance = useCallback(() => {
|
|
616
|
-
if (blockedReason) {
|
|
617
|
-
setNudgedStep(current);
|
|
618
|
-
return;
|
|
619
|
-
}
|
|
620
|
-
setNudgedStep(undefined);
|
|
621
|
-
const next = steps[stepIndex(steps, current) + 1];
|
|
622
|
-
if (next) goToStep(next);
|
|
623
|
-
}, [blockedReason, current, steps, goToStep]);
|
|
624
|
-
|
|
625
|
-
const runBulk = useCallback(
|
|
626
|
-
async (targets: readonly BulkActionTarget[]) => {
|
|
627
|
-
const action = bulkActionFor(verb, named.moveMailboxId, junkMailboxId);
|
|
628
|
-
if (!action) {
|
|
629
|
-
setBulkRun({
|
|
630
|
-
matched: targets.length,
|
|
631
|
-
sent: targets,
|
|
632
|
-
failureReason: noDestinationReason(verb),
|
|
633
|
-
});
|
|
634
|
-
return;
|
|
635
|
-
}
|
|
636
|
-
setBulkRun({ matched: targets.length, sent: targets });
|
|
637
|
-
const started = await runAction(action, targets, claimEnding);
|
|
638
|
-
setBulkRun({
|
|
639
|
-
matched: targets.length,
|
|
640
|
-
sent: targets,
|
|
641
|
-
outcome: started.kind === "ran" ? started.outcome : undefined,
|
|
642
|
-
failureReason: started.kind === "refused" ? started.reason : undefined,
|
|
643
|
-
});
|
|
644
|
-
},
|
|
645
|
-
[verb, named.moveMailboxId, junkMailboxId, runAction, claimEnding],
|
|
646
|
-
);
|
|
647
|
-
|
|
648
|
-
// The escalated predicate, run by the chunked runner the list already owns.
|
|
649
|
-
// It pages the match on the server rather than acting on ids the browser
|
|
650
|
-
// loaded, so the verb reaches every message the review screen counted.
|
|
651
|
-
const runEscalated = useCallback(async () => {
|
|
652
|
-
if (!escalated) return;
|
|
653
|
-
const action = bulkActionFor(verb, named.moveMailboxId, junkMailboxId);
|
|
654
|
-
if (!action) {
|
|
655
|
-
setBulkRun({
|
|
656
|
-
matched: escalated.total,
|
|
657
|
-
sent: [],
|
|
658
|
-
failureReason: noDestinationReason(verb),
|
|
659
|
-
});
|
|
660
|
-
return;
|
|
661
|
-
}
|
|
662
|
-
setBulkRun({ matched: escalated.total, sent: [] });
|
|
663
|
-
const started = await escalated.run(action, claimEnding);
|
|
664
|
-
setBulkRun({
|
|
665
|
-
matched: escalated.total,
|
|
666
|
-
sent: [],
|
|
667
|
-
outcome: started.kind === "ran" ? started.outcome : undefined,
|
|
668
|
-
failureReason: started.kind === "refused" ? started.reason : undefined,
|
|
669
|
-
});
|
|
670
|
-
}, [escalated, verb, named.moveMailboxId, junkMailboxId, claimEnding]);
|
|
671
|
-
|
|
672
|
-
const { start: startJob, watch: watchJob } = organizeJob;
|
|
673
|
-
const { createFilterAsync } = createFilter;
|
|
674
|
-
|
|
675
|
-
const sendCommit = useCallback(() => {
|
|
676
|
-
// An escalated predicate is not a rule and has no scope to reconstruct: it
|
|
677
|
-
// is the search the list is showing, applied once, by the runner that
|
|
678
|
-
// resolved it.
|
|
679
|
-
if (escalated) {
|
|
680
|
-
void runEscalated();
|
|
681
|
-
return;
|
|
682
|
-
}
|
|
683
|
-
const scope = organizeScopeFor({ mode: door, ruleScope: named.scope });
|
|
684
|
-
const organizeDraft = buildWizardDraft({
|
|
685
|
-
mode: door,
|
|
686
|
-
ruleScope: named.scope,
|
|
687
|
-
clauses: named.clauses,
|
|
688
|
-
matchOperator: named.matchOperator,
|
|
689
|
-
moveMailboxId: named.moveMailboxId,
|
|
690
|
-
until: named.until,
|
|
691
|
-
});
|
|
692
|
-
setCommittedScope(scope);
|
|
693
|
-
|
|
694
|
-
if (scope === "standing" || scope === "temporary") {
|
|
695
|
-
// Creating a filter also runs it over the inbox: the server queues that
|
|
696
|
-
// pass with the create and hands back its job id, which this screen
|
|
697
|
-
// follows. Ticked rows outside the inbox are not the job's to reach, so
|
|
698
|
-
// they take the action directly.
|
|
699
|
-
void createFilterAsync(
|
|
700
|
-
organizeDraft,
|
|
701
|
-
scope,
|
|
702
|
-
(named.name ?? "").trim(),
|
|
703
|
-
).then((created) => {
|
|
704
|
-
if (!created) return;
|
|
705
|
-
watchJob(created.organizeJobId);
|
|
706
|
-
if (outsideInbox.length > 0) void runBulk(outsideInbox);
|
|
707
|
-
});
|
|
708
|
-
return;
|
|
709
|
-
}
|
|
710
|
-
if (scope === "all-like-these" && widenedRunsAsJob(verb)) {
|
|
711
|
-
startJob(organizeDraft);
|
|
712
|
-
return;
|
|
713
|
-
}
|
|
714
|
-
// A widened match is resolved by the account's own preview, so every id it
|
|
715
|
-
// returned belongs to the account the wizard is scoped to.
|
|
716
|
-
void runBulk(
|
|
717
|
-
scope === "just-these"
|
|
718
|
-
? bulkTargets
|
|
719
|
-
: matchedIds.map((id) => ({ id, accountId })),
|
|
720
|
-
);
|
|
721
|
-
}, [
|
|
722
|
-
escalated,
|
|
723
|
-
runEscalated,
|
|
724
|
-
door,
|
|
725
|
-
named,
|
|
726
|
-
verb,
|
|
727
|
-
accountId,
|
|
728
|
-
bulkTargets,
|
|
729
|
-
matchedIds,
|
|
730
|
-
createFilterAsync,
|
|
731
|
-
watchJob,
|
|
732
|
-
outsideInbox,
|
|
733
|
-
startJob,
|
|
734
|
-
runBulk,
|
|
735
|
-
]);
|
|
736
|
-
|
|
737
|
-
// Two presses land in the same frame before either navigate settles, and both
|
|
738
|
-
// would send. The guard is a ref rather than the committed scope because that
|
|
739
|
-
// is state, and state has not been applied yet by the second press.
|
|
740
|
-
const commit = useCallback(() => {
|
|
741
|
-
if (blockedReason) {
|
|
742
|
-
setNudgedStep(current);
|
|
743
|
-
return;
|
|
744
|
-
}
|
|
745
|
-
if (commitSent.current) return;
|
|
746
|
-
commitSent.current = true;
|
|
747
|
-
goToStep("run");
|
|
748
|
-
sendCommit();
|
|
749
|
-
}, [blockedReason, current, goToStep, sendCommit]);
|
|
750
|
-
|
|
751
|
-
const jobSnapshot = useCallback(
|
|
752
|
-
(ruleSaved: boolean): RunSnapshot => {
|
|
753
|
-
const progress = organizeJob.progress;
|
|
754
|
-
const state = organizeRunState({
|
|
755
|
-
failure: organizeJob.failure,
|
|
756
|
-
isStarting: organizeJob.isStarting,
|
|
757
|
-
isRunning: organizeJob.isRunning,
|
|
758
|
-
isDone: organizeJob.isDone,
|
|
759
|
-
failedCount: progress.failedCount,
|
|
760
|
-
ruleSaved,
|
|
761
|
-
});
|
|
762
|
-
if (
|
|
763
|
-
state === "saving" ||
|
|
764
|
-
state === "commitFailed" ||
|
|
765
|
-
state === "backApplyStartFailed"
|
|
766
|
-
) {
|
|
767
|
-
return { ...NOT_STARTED, state };
|
|
768
|
-
}
|
|
769
|
-
return {
|
|
770
|
-
state,
|
|
771
|
-
matched: progress.matchedCount,
|
|
772
|
-
applied: progress.appliedCount,
|
|
773
|
-
failed:
|
|
774
|
-
state === "backApplyFailed" || state === "backApplyRestartFailed"
|
|
775
|
-
? progress.failedCount
|
|
776
|
-
: 0,
|
|
777
|
-
failures: [],
|
|
778
|
-
};
|
|
779
|
-
},
|
|
780
|
-
[organizeJob],
|
|
781
|
-
);
|
|
782
|
-
|
|
783
|
-
// Every row the wizard has seen a description of, so a run that names what it
|
|
784
|
-
// did not reach can name it rather than listing an id.
|
|
785
|
-
const rowsById = useMemo(() => {
|
|
786
|
-
const rows = new Map<string, WizardMessage>();
|
|
787
|
-
for (const message of [
|
|
788
|
-
...selection,
|
|
789
|
-
...matchSample.messages,
|
|
790
|
-
...escalatedSample.messages,
|
|
791
|
-
]) {
|
|
792
|
-
rows.set(message.id, message);
|
|
793
|
-
}
|
|
794
|
-
return rows;
|
|
795
|
-
}, [selection, matchSample.messages, escalatedSample.messages]);
|
|
796
|
-
|
|
797
|
-
const runProgress = escalated ? escalatedProgress : bulk.progress;
|
|
798
|
-
|
|
799
|
-
const bulkSnapshot = useCallback((): RunSnapshot => {
|
|
800
|
-
if (!bulkRun) return NOT_STARTED;
|
|
801
|
-
const report = bulkRunReport({
|
|
802
|
-
matched: bulkRun.matched,
|
|
803
|
-
outcome: bulkRun.outcome,
|
|
804
|
-
failureReason: bulkRun.failureReason,
|
|
805
|
-
progressDone: runProgress?.done ?? 0,
|
|
806
|
-
});
|
|
807
|
-
return {
|
|
808
|
-
state: report.state,
|
|
809
|
-
matched: report.matched,
|
|
810
|
-
applied: report.applied,
|
|
811
|
-
failed: report.failed,
|
|
812
|
-
failures: report.failedIds
|
|
813
|
-
.map((id) => rowsById.get(id))
|
|
814
|
-
.filter((message): message is WizardMessage => message !== undefined),
|
|
815
|
-
failureReason: report.failureReason,
|
|
816
|
-
};
|
|
817
|
-
}, [bulkRun, runProgress, rowsById]);
|
|
818
|
-
|
|
819
|
-
const createdFilter = createFilter.data;
|
|
820
|
-
// The direct action on ticked rows outside the inbox fell short. Its
|
|
821
|
-
// failures are reported over the job's progress: they are mail the user
|
|
822
|
-
// picked, and the job will never reach them.
|
|
823
|
-
const bulkFellShort =
|
|
824
|
-
bulkRun !== undefined &&
|
|
825
|
-
(bulkRun.failureReason !== undefined ||
|
|
826
|
-
(bulkRun.outcome?.failedIds.length ?? 0) > 0);
|
|
827
|
-
|
|
828
|
-
const runSnapshot = (): RunSnapshot => {
|
|
829
|
-
if (escalated) return bulkSnapshot();
|
|
830
|
-
if (committedScope === "standing" || committedScope === "temporary") {
|
|
831
|
-
if (createFilter.isError)
|
|
832
|
-
return { ...NOT_STARTED, state: "commitFailed" };
|
|
833
|
-
if (!createFilter.isSuccess) return NOT_STARTED;
|
|
834
|
-
if (bulkFellShort) return bulkSnapshot();
|
|
835
|
-
return jobSnapshot(true);
|
|
836
|
-
}
|
|
837
|
-
if (committedScope === "all-like-these" && widenedRunsAsJob(verb)) {
|
|
838
|
-
return jobSnapshot(false);
|
|
839
|
-
}
|
|
840
|
-
return bulkSnapshot();
|
|
841
|
-
};
|
|
842
|
-
|
|
843
|
-
const run = runSnapshot();
|
|
844
|
-
|
|
845
|
-
// Retry stays on the run screen: it re-sends the same commit rather than
|
|
846
|
-
// walking back to Review, which would push an entry the wizard does not own
|
|
847
|
-
// and leave Cancel rewinding to a step instead of out.
|
|
848
|
-
const retry = (): void => {
|
|
849
|
-
const ruleSaved =
|
|
850
|
-
committedScope === "standing" || committedScope === "temporary";
|
|
851
|
-
if (ruleSaved && bulkFellShort && bulkRun) {
|
|
852
|
-
const failed = new Set(bulkRun.outcome?.failedIds ?? []);
|
|
853
|
-
void runBulk(
|
|
854
|
-
failed.size > 0
|
|
855
|
-
? bulkRun.sent.filter((target) => failed.has(target.id))
|
|
856
|
-
: bulkRun.sent,
|
|
857
|
-
);
|
|
858
|
-
return;
|
|
859
|
-
}
|
|
860
|
-
const intent = retryIntent({
|
|
861
|
-
runState: run.state,
|
|
862
|
-
isEscalated: escalated !== undefined,
|
|
863
|
-
committedScope,
|
|
864
|
-
createFilterFailed: createFilter.isError,
|
|
865
|
-
backApplyPending: createdFilter !== undefined,
|
|
866
|
-
widenRunsAsJob: widenedRunsAsJob(verb),
|
|
867
|
-
failedIds: bulkRun?.outcome?.failedIds ?? [],
|
|
868
|
-
sent: bulkRun?.sent ?? bulkTargets,
|
|
869
|
-
});
|
|
870
|
-
switch (intent.kind) {
|
|
871
|
-
case "refreshStatus":
|
|
872
|
-
organizeJob.refreshStatus();
|
|
873
|
-
return;
|
|
874
|
-
case "rerunEscalated":
|
|
875
|
-
void runEscalated();
|
|
876
|
-
return;
|
|
877
|
-
case "resetAndResend":
|
|
878
|
-
createFilter.reset();
|
|
879
|
-
sendCommit();
|
|
880
|
-
return;
|
|
881
|
-
case "resend":
|
|
882
|
-
sendCommit();
|
|
883
|
-
return;
|
|
884
|
-
case "startBackApply":
|
|
885
|
-
if (createdFilter) organizeJob.startForFilter(createdFilter.filterId);
|
|
886
|
-
return;
|
|
887
|
-
case "waitOnJob":
|
|
888
|
-
return;
|
|
889
|
-
case "rerunBulk":
|
|
890
|
-
void runBulk(intent.targets);
|
|
891
|
-
return;
|
|
892
|
-
}
|
|
893
|
-
};
|
|
894
|
-
|
|
895
|
-
// Cancel rewinds the entries the wizard owns and leaves the selection where
|
|
896
|
-
// it was — nothing has happened to it (#477 1.6).
|
|
897
|
-
const cancel = useCallback(() => {
|
|
898
|
-
closeWizard(steps, current);
|
|
899
|
-
}, [closeWizard, steps, current]);
|
|
900
|
-
|
|
901
|
-
// The run screen's way out. The action has happened, so the rows it was
|
|
902
|
-
// aimed at are no longer a selection waiting to be acted on. It leaves the
|
|
903
|
-
// run alone: the screen says so in as many words, and stopping it is a
|
|
904
|
-
// control of its own.
|
|
905
|
-
const dismiss = useCallback(() => {
|
|
906
|
-
closeWizard(steps, current);
|
|
907
|
-
onFinished();
|
|
908
|
-
}, [closeWizard, steps, current, onFinished]);
|
|
909
|
-
|
|
910
|
-
const { stop: stopBulk } = bulk;
|
|
911
|
-
const stopRun = useCallback(() => {
|
|
912
|
-
stopRunner(escalated, stopBulk);
|
|
913
|
-
}, [escalated, stopBulk]);
|
|
914
|
-
|
|
915
|
-
// Hardware back on the run screen leaves the wizard, the movement the header
|
|
916
|
-
// arrow and the footer already make there (`backExits`). Run is an ordinary
|
|
917
|
-
// pushed entry, so without this the button pops back to Review, where the
|
|
918
|
-
// commit is offered a second time; the run screen holds the outcome, which is
|
|
919
|
-
// what makes rewinding the entries under it safe (#477 1.6).
|
|
920
|
-
//
|
|
921
|
-
// The rewind `dismiss` performs is `router.history.go(-N)`, which the history
|
|
922
|
-
// classifies as `"GO"` — so it does not re-enter this blocker and recurse.
|
|
923
|
-
// `selection-wizard-history.spec.ts` walks a real browser back off the run
|
|
924
|
-
// screen, which is what pins that classification.
|
|
925
|
-
useBlocker({
|
|
926
|
-
shouldBlockFn: ({ action }) => {
|
|
927
|
-
if (action !== "BACK") return false;
|
|
928
|
-
dismiss();
|
|
929
|
-
return true;
|
|
930
|
-
},
|
|
931
|
-
enableBeforeUnload: false,
|
|
932
|
-
disabled: current !== "run",
|
|
933
|
-
});
|
|
934
|
-
|
|
935
|
-
const sampleMessages = escalated
|
|
936
|
-
? escalatedSample.messages
|
|
937
|
-
: previewed
|
|
938
|
-
? matchSample.messages
|
|
939
|
-
: selection;
|
|
940
|
-
const sample = {
|
|
941
|
-
messages: sampleMessages,
|
|
942
|
-
count,
|
|
943
|
-
label: mode === "selected" ? "Your selection" : "A sample of what matches",
|
|
944
|
-
loading: escalated
|
|
945
|
-
? escalatedSample.isPending
|
|
946
|
-
: previewed && (count.status === "loading" || matchSample.isPending),
|
|
947
|
-
};
|
|
948
|
-
|
|
949
|
-
return (
|
|
950
|
-
<SelectionWizard
|
|
951
|
-
verb={verb}
|
|
952
|
-
steps={steps}
|
|
953
|
-
step={current}
|
|
954
|
-
blockedReason={blockedReason}
|
|
955
|
-
nudged={nudgedStep === current}
|
|
956
|
-
onBack={goBack}
|
|
957
|
-
// Every exit from the run screen is the same movement: the header's X,
|
|
958
|
-
// the header arrow, the footer and hardware Back all leave a run that
|
|
959
|
-
// has already been sent, and all of them drop the selection with it.
|
|
960
|
-
onExit={wizardExit(current, { dismiss, cancel })}
|
|
961
|
-
onContinue={advance}
|
|
962
|
-
onCommit={commit}
|
|
963
|
-
match={{
|
|
964
|
-
selectedCount: selection.length,
|
|
965
|
-
mode,
|
|
966
|
-
accountId: wizardScope.accountId,
|
|
967
|
-
onModeChange: changeMode,
|
|
968
|
-
escalatedScope: escalated?.scope,
|
|
969
|
-
sample,
|
|
970
|
-
}}
|
|
971
|
-
properties={{
|
|
972
|
-
clauses: named.clauses,
|
|
973
|
-
matchOperator: named.matchOperator,
|
|
974
|
-
onMatchOperatorChange: (matchOperator) =>
|
|
975
|
-
setDraft((held) => ({ ...held, matchOperator })),
|
|
976
|
-
clauseEdit,
|
|
977
|
-
onStartAddClause: startAddClause,
|
|
978
|
-
onStartEditClause: startEditClause,
|
|
979
|
-
onRemoveClause: removeClause,
|
|
980
|
-
onChangeDraft: changeClauseDraft,
|
|
981
|
-
onSubmitClause: submitClause,
|
|
982
|
-
onCancelClause: () => setClauseEdit(undefined),
|
|
983
|
-
clauseFields: SUPPORTED_CLAUSE_FIELDS,
|
|
984
|
-
clauseSuggestions,
|
|
985
|
-
conversionNotice: conversion
|
|
986
|
-
? searchConversionNotice(conversion)
|
|
987
|
-
: undefined,
|
|
988
|
-
sample: { ...sample, label: "What this matches" },
|
|
989
|
-
}}
|
|
990
|
-
folder={{
|
|
991
|
-
folders: mailboxes,
|
|
992
|
-
mailboxId: named.moveMailboxId,
|
|
993
|
-
delimiter: folderDelimiter(mailboxesData?.items ?? []),
|
|
994
|
-
onSelect: (moveMailboxId) =>
|
|
995
|
-
setDraft((held) => ({ ...held, moveMailboxId })),
|
|
996
|
-
onCreateFolder: accountId ? createFolderIn : undefined,
|
|
997
|
-
restriction: wizardScope.destination,
|
|
998
|
-
}}
|
|
999
|
-
rule={{
|
|
1000
|
-
draft: named,
|
|
1001
|
-
onScopeChange: (scope) => setDraft((held) => ({ ...held, scope })),
|
|
1002
|
-
onUntilChange: (until) => setDraft((held) => ({ ...held, until })),
|
|
1003
|
-
restriction: ruleRestriction,
|
|
1004
|
-
}}
|
|
1005
|
-
name={{
|
|
1006
|
-
name: named.name ?? "",
|
|
1007
|
-
onNameChange: (name) => setDraft((held) => ({ ...held, name })),
|
|
1008
|
-
nudged: nudgedStep === current,
|
|
1009
|
-
}}
|
|
1010
|
-
review={{
|
|
1011
|
-
verb,
|
|
1012
|
-
mode,
|
|
1013
|
-
selectedCount: selection.length,
|
|
1014
|
-
clauses: named.clauses,
|
|
1015
|
-
matchOperator: named.matchOperator,
|
|
1016
|
-
folder: folderLabel,
|
|
1017
|
-
scope: named.scope,
|
|
1018
|
-
until: named.until,
|
|
1019
|
-
ruleName: steps.includes("name") ? named.name : undefined,
|
|
1020
|
-
escalatedScope: escalated?.scope,
|
|
1021
|
-
sample,
|
|
1022
|
-
}}
|
|
1023
|
-
run={{
|
|
1024
|
-
state: run.state,
|
|
1025
|
-
verb,
|
|
1026
|
-
scope: named.scope,
|
|
1027
|
-
matched: run.matched,
|
|
1028
|
-
applied: run.applied,
|
|
1029
|
-
failedCount: run.failed,
|
|
1030
|
-
failures: run.failures,
|
|
1031
|
-
failureReason: run.failureReason,
|
|
1032
|
-
onRetry: retry,
|
|
1033
|
-
onDismiss: dismiss,
|
|
1034
|
-
onCancelRun: runIsInFlight(bulkRun) ? stopRun : undefined,
|
|
1035
|
-
}}
|
|
1036
|
-
/>
|
|
1037
|
-
);
|
|
1038
|
-
}
|
|
1039
|
-
|
|
1040
|
-
/**
|
|
1041
|
-
* The wizard's mount point, and the only one: both entries walk this host, so
|
|
1042
|
-
* there is one owner of the step in the URL and of the history entries the
|
|
1043
|
-
* wizard pushes. The walk itself is a separate component, mounted only while a
|
|
1044
|
-
* step is held, so every answer it collects is gone by the time the next one
|
|
1045
|
-
* starts.
|
|
1046
|
-
*
|
|
1047
|
-
* The URL says which affordance opened the wizard, and that decides two things
|
|
1048
|
-
* and no more: which step it opens on, and whether the query seeds the clauses.
|
|
1049
|
-
* A search entry ticks nothing, so the selection the bar would have handed over
|
|
1050
|
-
* is not the one it walks; its rule belongs to the account the surface handed
|
|
1051
|
-
* over, and to the one the query names when it names one (#524).
|
|
1052
|
-
*/
|
|
1053
|
-
export function SelectionWizardHost(props: SelectionWizardHostProps) {
|
|
1054
|
-
const fromSearch = useWizardEntryValue() === "search";
|
|
1055
|
-
const searchConversion = useSearchConversion();
|
|
1056
|
-
const { accounts } = useMailContext();
|
|
1057
|
-
const { step, goToStep, goBack, closeWizard } = useWizardStep(
|
|
1058
|
-
fromSearch ? "properties" : "match",
|
|
1059
|
-
);
|
|
1060
|
-
// A walk in progress owns the keyboard. It answers nothing itself — Back and
|
|
1061
|
-
// Close are on screen, and Escape abandoning a half-run selection is not what
|
|
1062
|
-
// the reader asked for — so every triage key is contained until it closes.
|
|
1063
|
-
useOverlayScope({ id: "selection-wizard", open: step !== undefined });
|
|
1064
|
-
if (!step) return null;
|
|
1065
|
-
const conversion = fromSearch
|
|
1066
|
-
? (searchConversion ?? NO_CONVERSION)
|
|
1067
|
-
: undefined;
|
|
1068
|
-
return (
|
|
1069
|
-
<SelectionWizardSession
|
|
1070
|
-
{...props}
|
|
1071
|
-
{...(conversion ? searchEntryOverrides(conversion, props, accounts) : {})}
|
|
1072
|
-
step={step}
|
|
1073
|
-
goToStep={goToStep}
|
|
1074
|
-
goBack={goBack}
|
|
1075
|
-
closeWizard={closeWizard}
|
|
1076
|
-
/>
|
|
1077
|
-
);
|
|
1078
|
-
}
|