import { isRouteErrorResponse, Link, Links, Meta, Outlet, Scripts, ScrollRestoration, } from "react-router"; import type { Route } from "./+types/root"; import "@fontsource-variable/roboto"; import "./root.css"; //#region Maplibre setup import "maplibre-theme/icons.default.css"; import "maplibre-theme/modern.css"; import { Protocol } from "pmtiles"; import maplibregl, { type LngLatLike } from "maplibre-gl"; import { AppProvider } from "./AppContext"; const pmtiles = new Protocol(); maplibregl.addProtocol("pmtiles", pmtiles.tile); //#endregion import "./i18n"; if ("serviceWorker" in navigator) { navigator.serviceWorker .register("/sw.js") .then((registration) => { console.log("Service Worker registered with scope:", registration.scope); }) .catch((error) => { console.error("Service Worker registration failed:", error); }); } export const links: Route.LinksFunction = () => []; export function HydrateFallback() { return "Loading..."; } export function Layout({ children }: { children: React.ReactNode }) { return ( Busurbano {children} ); } // Helper: check if coordinates are within Vigo bounds function isWithinVigo(lngLat: LngLatLike): boolean { let lng: number, lat: number; if (Array.isArray(lngLat)) { [lng, lat] = lngLat; } else if ("lng" in lngLat && "lat" in lngLat) { lng = lngLat.lng; lat = lngLat.lat; } else { return false; } // Rough bounding box for Vigo return lat >= 42.18 && lat <= 42.3 && lng >= -8.78 && lng <= -8.65; } import NavBar from "./components/NavBar"; 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)) { 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}
        
)}
); }