{message}
{details}
{stack && (
{stack}
)}
import { isRouteErrorResponse, Links, Meta, Outlet, Scripts, ScrollRestoration, } 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 { themeStorageKey } from './features/theme/themes'; const themeInitScript = ` (function () { try { var theme = localStorage.getItem(${JSON.stringify(themeStorageKey)}); if (theme) document.documentElement.setAttribute('data-theme', theme); } catch (e) {} })(); `; 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); return { auth }; }; export const Layout = ({ children }: { children: React.ReactNode }) => { return (
{details}
{stack && (
{stack}
)}