diff --git a/app/[locale]/calendar/page.tsx b/app/[locale]/calendar/page.tsx index cbc40693..eb39244d 100644 --- a/app/[locale]/calendar/page.tsx +++ b/app/[locale]/calendar/page.tsx @@ -32,6 +32,7 @@ import { CalendarSidebarPanel } from "@/components/calendar/calendar-sidebar-pan import { EventModal, type PendingEventPreview } from "@/components/calendar/event-modal"; import { EventDetailPopover } from "@/components/calendar/event-detail-popover"; import { EventContextMenu } from "@/components/calendar/event-context-menu"; +import { AppTopBannerSlot } from "@/components/plugins/app-top-banner-slot"; import { EmptySpaceContextMenu } from "@/components/calendar/empty-space-context-menu"; import { useContextMenu } from "@/hooks/use-context-menu"; import { useRefreshGesture } from "@/hooks/use-refresh-gesture"; @@ -1216,7 +1217,9 @@ export default function CalendarPage() { }; return ( -
+
+ +
{/* Left Navigation Rail */} {!isMobile && (
@@ -1580,6 +1583,7 @@ export default function CalendarPage() { /> ); })()} +
); } diff --git a/app/[locale]/contacts/page.tsx b/app/[locale]/contacts/page.tsx index 552424c2..3fc1f59f 100644 --- a/app/[locale]/contacts/page.tsx +++ b/app/[locale]/contacts/page.tsx @@ -15,6 +15,7 @@ import { ContactsSidebar, type ContactCategory } from "@/components/contacts/con import { ContactImportDialog } from "@/components/contacts/contact-import-dialog"; import { RenameDialog } from "@/components/files/rename-dialog"; import { exportContacts } from "@/components/contacts/contact-export"; +import { AppTopBannerSlot } from "@/components/plugins/app-top-banner-slot"; import { useContactStore, getContactDisplayName } from "@/stores/contact-store"; import { useAuthStore, redirectToLogin } from "@/stores/auth-store"; import { useEmailStore } from "@/stores/email-store"; @@ -649,7 +650,9 @@ export default function ContactsPage() { }; return ( -
+
+ +
{/* Navigation Rail - desktop only */} {!isMobile && (
@@ -882,6 +885,7 @@ export default function ContactsPage() { /> ); })()} +
); } diff --git a/app/[locale]/files/page.tsx b/app/[locale]/files/page.tsx index df7bcdd2..7a96b984 100644 --- a/app/[locale]/files/page.tsx +++ b/app/[locale]/files/page.tsx @@ -24,6 +24,7 @@ import { ImagePreviewModal } from "@/components/files/image-preview-modal"; import { FilePreviewModal } from "@/components/files/file-preview-modal"; import { loadFilesSettings } from "@/components/files/files-settings-dialog"; import type { FolderLayout } from "@/components/files/files-settings-dialog"; +import { AppTopBannerSlot } from "@/components/plugins/app-top-banner-slot"; import { AlertTriangle } from "lucide-react"; export default function FilesPage() { @@ -374,7 +375,9 @@ export default function FilesPage() { if (!isAuthenticated) return null; return ( -
+
+ +
{!isMobile && (
+
); } diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 229a4600..e1256d3d 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -60,7 +60,7 @@ import { ResizeHandle } from "@/components/layout/resize-handle"; import { Button } from "@/components/ui/button"; import { useConfig } from "@/hooks/use-config"; import { usePluginStore } from "@/stores/plugin-store"; -import { PluginSlot } from "@/components/plugins/plugin-slot"; +import { AppTopBannerSlot } from "@/components/plugins/app-top-banner-slot"; import { useThemeStore } from "@/stores/theme-store"; import { consumePendingMailto, subscribeToPendingMailto } from "@/lib/protocol-handlers/session"; import type { ParsedMailto } from "@/lib/protocol-handlers/mailto"; @@ -98,7 +98,7 @@ export default function Home() { const [pendingMailtoAccountChoice, setPendingMailtoAccountChoice] = useState(null); const [isProtocolAccountSwitching, setIsProtocolAccountSwitching] = useState(false); const markAsReadTimeoutRef = useRef(null); - const { isAuthenticated, client, logout, checkAuth, switchAccount, activeAccountId, isLoading: authLoading, connectionLost, isRateLimited, rateLimitUntil, username, serverUrl } = useAuthStore(); + const { isAuthenticated, client, logout, checkAuth, switchAccount, activeAccountId, isLoading: authLoading, connectionLost, isRateLimited, rateLimitUntil } = useAuthStore(); const { identities } = useIdentityStore(); useIdentitySync(); const trustedSendersAddressBook = useSettingsStore((state) => state.trustedSendersAddressBook); @@ -1961,7 +1961,7 @@ export default function Home() { return (
- + {isRateLimited && rateLimitSecondsLeft !== null && (
diff --git a/app/[locale]/settings/page.tsx b/app/[locale]/settings/page.tsx index 14dbe9c1..d349d383 100644 --- a/app/[locale]/settings/page.tsx +++ b/app/[locale]/settings/page.tsx @@ -39,6 +39,7 @@ import { import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { AppearanceSettings } from '@/components/settings/appearance-settings'; +import { AppTopBannerSlot } from '@/components/plugins/app-top-banner-slot'; import { LayoutSettings } from '@/components/settings/layout-settings'; import { LanguageSettings } from '@/components/settings/language-settings'; import { ReadingSettings } from '@/components/settings/reading-settings'; @@ -687,6 +688,7 @@ export default function SettingsPage() { if (mobileShowContent) { return (
+