import { lazy, Suspense } from "react" import { CenterSpinner } from "@/shared/components/CenterSpinner" import { Navigate, type RouteObject } from "react-router-dom" import Layout from "@/shared/components/Layout" import ProtectedRoute from "@/shared/components/ProtectedRoute" import { SnapLayout } from "@/features/snap/components/SnapLayout" import { PaletteShell } from "@/shared/components/PaletteShell" import { PATHS } from "@/config/routes" const LoginPage = lazy(() => import("@/features/auth/pages/LoginPage")) const SessionListPage = lazy(() => import("@/features/snap/pages/SessionListPage")) const NewChatPage = lazy(() => import("@/features/snap/pages/NewChatPage")) const SessionChatPage = lazy(() => import("@/features/snap/pages/SessionChatPage")) const SnippetPalettePage = lazy(() => import("@/features/snippets/pages/SnippetPalettePage")) const AdminStatsPage = lazy(() => import("@/features/admin/pages/AdminStatsPage")) const fallback = const wrap = (el: React.ReactNode) => {el} export const routes: RouteObject[] = [ { element: , children: [{ path: PATHS.LOGIN.slice(1), element: wrap() }], }, { element: , children: [ { // 챗봇(snap)·스니펫 공통 래퍼 — 붙여넣기 대상 배지 등 공통 UI 를 여기 한 곳에. element: , children: [ { element: , children: [ { path: PATHS.SNAP.slice(1), element: wrap() }, { path: PATHS.SNAP_NEW.slice(1), element: wrap() }, { path: PATHS.SNAP_SESSION.slice(1), element: wrap() }, { path: PATHS.ADMIN.slice(1), element: wrap() }, ], }, { // snap 헤더·Ctrl+N 없이 풀윈도우(Raycast). h-full 체인은 PaletteShell 의 h-screen 에 기댐. path: PATHS.SNIPPET.slice(1), element: wrap(), }, ], }, ], }, { path: "*", element: }, ]