import { isRouteErrorResponse, Links, Meta, Outlet, Scripts, ScrollRestoration, } from 'react-router'; import { RootProvider } from '@hanzo/docs-ui/provider/react-router'; import type { Route } from './+types/root'; import './app.css'; import { isMarkdownPreferred, rewritePath } from '@hanzo/docs-core/negotiation'; import NotFound from './routes/not-found'; import { docsContentRoute, docsRoute } from '@/lib/shared'; 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=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap', }, ]; export function Layout({ children }: { children: React.ReactNode }) { return ( {children} ); } export default function App() { return ; } export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { let message = 'Oops!'; let details = 'An unexpected error occurred.'; let stack: string | undefined; if (isRouteErrorResponse(error)) { if (error.status === 404) return ; message = 'Error'; details = error.statusText; } else if (import.meta.env.DEV && error && error instanceof Error) { details = error.message; stack = error.stack; } return (

{message}

{details}

{stack && (
          {stack}
        
)}
); } const { rewrite: rewriteDocs } = rewritePath( `${docsRoute}{/*path}`, `${docsContentRoute}{/*path}/content.md`, ); const { rewrite: rewriteSuffix } = rewritePath( `${docsRoute}{/*path}.md`, `${docsContentRoute}{/*path}/content.md`, ); const serverMiddleware: Route.MiddlewareFunction = async ({ request }, next) => { const url = new URL(request.url); const suffixPath = rewriteSuffix(url.pathname); if (suffixPath) return Response.redirect(new URL(suffixPath, url)); if (isMarkdownPreferred(request)) { const docsPath = rewriteDocs(url.pathname); if (docsPath) return Response.redirect(new URL(docsPath, url)); } return next(); }; export const middleware = [serverMiddleware];