import { isRouteErrorResponse, Links, Meta, Outlet, Scripts, ScrollRestoration, useRouteLoaderData, } from 'react-router'; import type { Route } from './+types/root'; import './app.css'; import Navbar from './components/ui/navbar/Navbar'; import ToastProvider from './components/ui/toast/ToastProvider'; import { getOptionalAuth } from './features/auth/auth.server'; import AiDisclosureDialog from './features/home/components/AiDisclosureDialog'; import { defaultThemeName, parseThemeCookie } from './features/theme/themes'; export const links: Route.LinksFunction = () => [ { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossOrigin: 'anonymous', }, { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..900;1,9..40,100..900&family=Volkhov:ital,wght@0,400;0,700;1,400;1,700&display=swap', }, ]; export const loader = async ({ request }: Route.LoaderArgs) => { const auth = await getOptionalAuth(request); const theme = parseThemeCookie(request.headers.get('Cookie')); return { auth, theme }; }; export const Layout = ({ children }: { children: React.ReactNode }) => { const theme = useRouteLoaderData('root')?.theme ?? defaultThemeName; return ( {children} ); }; const App = ({ loaderData }: Route.ComponentProps) => { const { auth } = loaderData; return ( <> ); }; export default App; export const ErrorBoundary = ({ error }: Route.ErrorBoundaryProps) => { let message = 'Oops!'; let details = 'An unexpected error occurred.'; let stack: string | undefined; if (isRouteErrorResponse(error)) { message = error.status === 404 ? '404' : 'Error'; details = error.status === 404 ? 'The requested page could not be found.' : error.statusText || details; } else if (import.meta.env.DEV && error && error instanceof Error) { details = error.message; stack = error.stack; } return (

{message}

{details}

{stack && (
                    {stack}
                
)}
); };