import { lazy, Suspense, type ReactNode } from "react"; import { createBrowserRouter, Navigate, Outlet } from "react-router"; import { RequireAuth } from "@/components/auth/require-auth"; import { RequireFeature } from "@/components/auth/require-feature"; import { FullScreenLoader, WorkspaceRouteLoader } from "@/components/ui/aceternity/full-screen-loader"; import { loadAssetsPage, loadCanvasPage, loadCreatePage, loadProjectsPage, loadWalletPage } from "@/lib/workspace-route-modules"; import UserLayout from "@/layouts/user-layout"; import { AuthScene } from "@/pages/auth/auth-scene"; import RouteErrorPage from "@/pages/route-error"; const AdminPage = lazy(() => import("@/pages/admin")); const AnalyticsPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.AnalyticsPage }))); const AnnouncementsPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.AnnouncementsPage }))); const CreditOperationsPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.CreditOperationsPage }))); const AccessSettingsPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.AccessSettingsPage }))); const EmailSettingsPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.EmailSettingsPage }))); const FeatureAvailabilityPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.FeatureAvailabilityPage }))); const ChannelsPage = lazy(() => import("@/pages/admin/channels/channels-page")); const LogicalModelsPage = lazy(() => import("@/pages/admin/logical-models/logical-models-page")); const LogsPage = lazy(() => import("@/pages/admin/logs/logs-page")); const RedemptionCodesPage = lazy(() => import("@/pages/admin/redemption-codes/redemption-codes-page")); const RuntimePolicySettingsPage = lazy(() => import("@/pages/admin/settings/runtime-policy-settings-page")); const DrawingEngineSettingsPage = lazy(() => import("@/pages/admin/settings/drawing-engine-settings-page")); const StorageSettingsPage = lazy(() => import("@/pages/admin/settings/storage-settings-page")); const ResponseInterceptionSettingsPage = lazy(() => import("@/pages/admin/settings/response-interception-settings-page")); const ThirdPartySettingsPage = lazy(() => import("@/pages/admin/settings/libtv-settings-page")); const StoryboardPromptsPage = lazy(() => import("@/pages/admin/storyboard-prompts/storyboard-prompts-page")); const UsersPage = lazy(() => import("@/pages/admin/users/users-page")); const AssetsPage = lazy(loadAssetsPage); const LoginPage = lazy(() => import("@/pages/auth/login")); const RegisterPage = lazy(() => import("@/pages/auth/register")); const CanvasPage = lazy(loadCanvasPage); const CanvasProjectPage = lazy(() => import("@/pages/canvas/project")); const SharedCanvasPage = lazy(() => import("@/pages/canvas/shared")); const CreatePage = lazy(loadCreatePage); const HomePage = lazy(() => import("@/pages/home")); const NotFound = lazy(() => import("@/pages/not-found")); const SkillsPage = lazy(() => import("@/pages/skills")); const PluginsPage = lazy(() => import("@/pages/plugins")); const EagleLibraryPage = lazy(() => import("@/pages/plugins/eagle")); const TasksPage = lazy(() => import("@/pages/tasks")); const WalletPage = lazy(loadWalletPage); const ProjectsPage = lazy(loadProjectsPage); const ProjectDetailPage = lazy(() => import("@/pages/projects/detail")); const SettingsPage = lazy(() => import("@/pages/settings")); const TestVoiceRecording = lazy(() => import("@/pages/test-voice-recording")); const FolderPreviewLab = lazy(() => import("@/pages/dev/folder-preview-lab")); function deferred(element: ReactNode) { return }>{element}; } function fullScreenDeferred(element: ReactNode) { return }>{element}; } export const router = createBrowserRouter([ { element: , errorElement: , children: [ { path: "/login", element: fullScreenDeferred() }, { path: "/register", element: fullScreenDeferred() }, ], }, { path: "/share/canvas/:token", element: fullScreenDeferred(), errorElement: }, ...(import.meta.env.DEV ? [{ path: "/dev/folders", element: fullScreenDeferred(), errorElement: }] : []), { element: ( ), errorElement: , children: [ { path: "/", element: }, { path: "/create", element: {deferred()} }, { path: "/home", element: deferred() }, { path: "/tasks", element: ( {deferred()} ), }, { path: "/assets", element: {deferred()} }, { path: "/skills", element: {deferred()} }, { path: "/plugins", element: {deferred()} }, { path: "/plugins/eagle", element: {deferred()} }, { path: "/wallet", element: ( {deferred()} ), }, { path: "/settings", element: {deferred()} }, { path: "/test-voice-recording", element: {deferred()} }, { path: "/projects", element: ( {deferred()} ), }, { path: "/projects/:projectId", element: ( {deferred()} ), }, { path: "/projects/:projectId/:view", element: ( {deferred()} ), }, { path: "/projects/:projectId/chapters/:chapterId", element: ( {deferred()} ), }, { path: "/canvas", element: {deferred()} }, { path: "/canvas/:id", element: {deferred()} }, { path: "/admin", element: {deferred()}, children: [ { index: true, element: deferred() }, { path: "users", element: deferred() }, { path: "channels", element: deferred() }, { path: "models", element: deferred() }, { path: "prompt-templates", element: deferred() }, { path: "storyboard-prompts", element: }, { path: "announcements", element: deferred() }, { path: "credit-operations", element: deferred() }, { path: "redemption-codes", element: deferred() }, { path: "logs", element: deferred() }, { path: "settings", element: }, { path: "settings/drawing-engine", element: deferred() }, { path: "settings/concurrency", element: }, { path: "settings/runtime-policy", element: deferred() }, { path: "settings/features", element: deferred() }, { path: "settings/access", element: deferred() }, { path: "settings/email", element: deferred() }, { path: "settings/storage", element: deferred() }, { path: "settings/response-interception", element: deferred() }, { path: "settings/third-party", element: deferred() }, { path: "settings/libtv", element: }, ], }, ], }, { path: "*", element: fullScreenDeferred() }, ]);