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 StorageResourcesPage = lazy(() => import("@/pages/admin/admin-route-pages").then((module) => ({ default: module.StorageResourcesPage })));
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 AdminPluginsPage = lazy(() => import("@/pages/admin/plugins/plugins-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 ArkPrivateAssetsSettingsPage = lazy(() => import("@/pages/admin/settings/ark-private-assets-settings-page"));
const ResponseInterceptionSettingsPage = lazy(() => import("@/pages/admin/settings/response-interception-settings-page"));
const ThirdPartySettingsPage = lazy(() => import("@/pages/admin/settings/libtv-settings-page"));
const SystemUpdatePage = lazy(() => import("@/pages/admin/settings/system-update-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 ForgotPasswordPage = lazy(() => import("@/pages/auth/forgot-password"));
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"));
function deferred(element: ReactNode) {
return }>{element};
}
function fullScreenDeferred(element: ReactNode) {
return }>{element};
}
/**
* DEV 专用实验室路由。
*
* lazy(() => import(...)) 写在函数体内,而不是模块顶层常量:
* 生产构建时 import.meta.env.DEV 被替换为 false,本函数随之不可达,
* 摇树会连同其中的动态 import 一起删除,实验室代码不进入生产依赖图。
* 若把 lazy 提到模块顶层,动态 import 会被静态分析成真实 chunk 并打进 dist。
*/
function devRoutes() {
const FolderPreviewLab = lazy(() => import("@/pages/dev/folder-preview-lab"));
const DirectorReproLab = lazy(() => import("@/pages/dev/director-repro-lab"));
return [
{ path: "/dev/folders", element: fullScreenDeferred(), errorElement: },
{ path: "/dev/director-repro", element: fullScreenDeferred(), errorElement: },
];
}
export const router = createBrowserRouter([
{
element: ,
errorElement: ,
children: [
{ path: "/login", element: fullScreenDeferred() },
{ path: "/register", element: fullScreenDeferred() },
{ path: "/forgot-password", element: fullScreenDeferred() },
],
},
{ path: "/share/canvas/:token", element: fullScreenDeferred(), errorElement: },
...(import.meta.env.DEV ? devRoutes() : []),
{
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: "/projects/:projectId/workflow/:unitId/:stage",
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: "plugins", element: deferred() },
{ path: "prompt-templates", element: deferred() },
{ path: "storyboard-prompts", element: },
{ path: "announcements", element: deferred() },
{ path: "resources", 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/ark-private-assets", element: deferred() },
{ path: "settings/response-interception", element: deferred() },
{ path: "settings/third-party", element: deferred() },
{ path: "settings/system-update", element: deferred() },
{ path: "settings/libtv", element: },
],
},
],
},
{ path: "*", element: fullScreenDeferred() },
]);