import { createRootRoute, createRoute, createRouter, Outlet } from '@tanstack/react-router'; import { AppFrame } from '@/components/AppFrame/AppFrame'; import { AudioTab } from '@/components/AudioTab/AudioTab'; import { MainEditor } from '@/components/MainEditor/MainEditor'; import { ModelsTab } from '@/components/ModelsTab/ModelsTab'; import { ServerTab } from '@/components/ServerTab/ServerTab'; import { Sidebar } from '@/components/Sidebar'; import { StoriesTab } from '@/components/StoriesTab/StoriesTab'; import { Toaster } from '@/components/ui/toaster'; import { VoicesTab } from '@/components/VoicesTab/VoicesTab'; import { useModelDownloadToast } from '@/lib/hooks/useModelDownloadToast'; import { MODEL_DISPLAY_NAMES, useRestoreActiveTasks } from '@/lib/hooks/useRestoreActiveTasks'; // Simple platform check that works in both web and Tauri const isMacOS = () => navigator.platform.toLowerCase().includes('mac'); // Root layout component function RootLayout() { // Monitor active downloads/generations and show toasts for them const activeDownloads = useRestoreActiveTasks(); return (
{/* Show download toasts for any active downloads (from anywhere) */} {activeDownloads.map((download) => { const displayName = MODEL_DISPLAY_NAMES[download.model_name] || download.model_name; return ( ); })}
); } /** * Component that restores a download toast for a specific model. */ function DownloadToastRestorer({ modelName, displayName, }: { modelName: string; displayName: string; }) { // Use the download toast hook to restore the toast useModelDownloadToast({ modelName, displayName, enabled: true, }); return null; } // Root route with layout const rootRoute = createRootRoute({ component: RootLayout, }); // Index route (main/generate) const indexRoute = createRoute({ getParentRoute: () => rootRoute, path: '/', component: MainEditor, }); // Stories route const storiesRoute = createRoute({ getParentRoute: () => rootRoute, path: '/stories', component: StoriesTab, }); // Voices route const voicesRoute = createRoute({ getParentRoute: () => rootRoute, path: '/voices', component: VoicesTab, }); // Audio route const audioRoute = createRoute({ getParentRoute: () => rootRoute, path: '/audio', component: AudioTab, }); // Models route const modelsRoute = createRoute({ getParentRoute: () => rootRoute, path: '/models', component: ModelsTab, }); // Server route const serverRoute = createRoute({ getParentRoute: () => rootRoute, path: '/server', component: ServerTab, }); // Route tree const routeTree = rootRoute.addChildren([ indexRoute, storiesRoute, voicesRoute, audioRoute, modelsRoute, serverRoute, ]); // Create router export const router = createRouter({ routeTree }); // Register router for type safety declare module '@tanstack/react-router' { interface Register { router: typeof router; } }