/// <reference types="vite/client" />
import type { QueryClient } from "@tanstack/react-query";
import { HeadContent, Scripts, createRootRouteWithContext, useRouter, useRouterState } from "@tanstack/react-router";
import * as React from "react";
import { DefaultCatchBoundary } from "~/components/DefaultCatchBoundary";
import { NotFound } from "~/components/NotFound";
import { SiteHeader } from "~/components/SiteHeader";
import { SiteFooter } from "~/components/SiteFooter";
import { HovercardLayer } from "~/components/HovercardLayer";
import { AccountNotices } from "~/components/AccountNotices";
import { UpsellDialog } from "~/components/billing/UpsellDialog";
import { DisabledAccountNotice } from "~/components/DisabledAccountNotice";
import { reachableWhileDisabled } from "~/lib/account-disable";
import { getSession } from "~/fns/auth";
import appCss from "~/styles/app.css?url";
import { seo } from "~/utils/seo";
import { SITE_DESCRIPTION } from "~/lib/og";
import { capturePageview, identifyViewer, initAnalytics, onNavigate } from "~/lib/analytics";
export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()({
beforeLoad: async () => {
const session = await getSession();
return {
viewer: session.viewer,
supporter: session.supporter,
unreadNotifications: session.unreadNotifications,
analytics: session.analytics,
disabled: session.disabled,
publicUrl: session.publicUrl,
};
},
head: ({ match }) => ({
meta: [
{ charSet: "utf-8" },
{ name: "viewport", content: "width=device-width, initial-scale=1" },
{ name: "theme-color", content: "#0a0a0a" },
...seo({
origin: match.context?.publicUrl,
title: "gitfor · Open-source Git hosting, code review and CI",
description: SITE_DESCRIPTION,