import { Outlet, HeadContent, Scripts, createRootRouteWithContext } from "@tanstack/react-router"; import appCss from "../app.css?url"; import { apiClientMiddleware } from "~/middleware/api-client"; import type { QueryClient } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { Toaster } from "~/client/components/ui/sonner"; import { useServerEvents } from "~/client/hooks/use-server-events"; import { useEffect } from "react"; import { ThemeProvider, THEME_COOKIE_NAME } from "~/client/components/theme-provider"; import { createServerFn } from "@tanstack/react-start"; import { getCookie } from "@tanstack/react-start/server"; const fetchTheme = createServerFn({ method: "GET" }).handler(async () => { const themeCookie = getCookie(THEME_COOKIE_NAME); return (themeCookie === "light" ? "light" : "dark") as "light" | "dark"; }); export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()({ server: { middleware: [apiClientMiddleware], }, loader: async () => { const theme = await fetchTheme(); return { theme }; }, head: () => ({ meta: [{ title: "Zerobyte - Open Source Backup Solution" }], links: [ { rel: "stylesheet", href: appCss, }, { 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=Google+Sans+Code:ital,wght@0,300..800;1,300..800&display=swap", }, ], }), component: RootLayout, errorComponent: (e) =>