diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 20a48e5..d204c26 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -57,13 +57,3 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() - -import type { getRouter } from './router.tsx' -import type { startInstance } from './start.ts' -declare module '@tanstack/react-start' { - interface Register { - ssr: true - router: Awaited> - config: Awaited> - } -} diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 8d8bdc2..362845c 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -7,28 +7,158 @@ import { HeadContent, Scripts, } from "@tanstack/react-router"; -import { useEffect, type ReactNode } from "react"; +import { useEffect, useState, type ReactNode } from "react"; +import { Menu, X, Phone } from "lucide-react"; import appCss from "../styles.css?url"; import { reportLovableError } from "../lib/lovable-error-reporting"; +const NAV = [ + { to: "/", label: "Home" }, + { to: "/about", label: "About" }, + { to: "/applications", label: "Applications" }, + { to: "/products", label: "Products" }, + { to: "/solutions", label: "Solutions" }, + { to: "/projects", label: "Projects" }, + { to: "/enquiry", label: "Enquiry" }, + { to: "/contact", label: "Contact" }, + { to: "/rental", label: "Rental" }, +] as const; + +function TopBar() { + return ( +
+
+ + +971 4 251 5596 + + + +971 55 209 8628 + +
+
+ ); +} + +function Header() { + const [open, setOpen] = useState(false); + return ( +
+
+ + + Pro + mist + + + Misting Systems + + + + +
+ {open && ( +
+
+ {NAV.map((n) => ( + setOpen(false)} + className="text-foreground/80 hover:text-brand-red" + activeProps={{ className: "text-brand-red" }} + activeOptions={{ exact: n.to === "/" }} + > + {n.label} + + ))} +
+
+ )} +
+ ); +} + +function Footer() { + return ( +
+
+
+
+ Pro + mist +
+

+ High-pressure misting systems for cooling, humidification and dust suppression since 1979. +

+
+
+

Explore

+
    + {NAV.slice(1, 6).map((n) => ( +
  • + {n.label} +
  • + ))} +
+
+
+

Company

+
    +
  • Enquiry
  • +
  • Contact
  • +
  • Rental
  • +
+
+
+

Contact

+
    +
  • +971 4 251 5596
  • +
  • +971 55 209 8628
  • +
  • Dubai, United Arab Emirates
  • +
+
+
+
+
+ © {new Date().getFullYear()} Promist Misting Systems. All rights reserved. + Humidity and Control +
+
+
+ ); +} + function NotFoundComponent() { return ( -
+
-

404

-

Page not found

+

404

+

Page not found

The page you're looking for doesn't exist or has been moved.

-
- - Go home - -
+ + Go home +
); @@ -40,32 +170,17 @@ function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) { useEffect(() => { reportLovableError(error, { boundary: "tanstack_root_error_component" }); }, [error]); - return ( -
+
-

- This page didn't load -

-

- Something went wrong on our end. You can try refreshing or head back home. -

-
+

This page didn't load

+

Something went wrong. Try again or head home.

+
- - Go home - + onClick={() => { router.invalidate(); reset(); }} + className="rounded-md bg-brand-red text-white px-4 py-2 text-sm font-medium" + >Try again + Go home
@@ -77,21 +192,19 @@ export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()( meta: [ { charSet: "utf-8" }, { name: "viewport", content: "width=device-width, initial-scale=1" }, - { title: "Lovable App" }, - { name: "description", content: "Lovable Generated Project" }, - { name: "author", content: "Lovable" }, - { property: "og:title", content: "Lovable App" }, - { property: "og:description", content: "Lovable Generated Project" }, + { title: "Promist Misting Systems — Humidity and Control" }, + { name: "description", content: "High-pressure misting systems for outdoor cooling, humidification, dust suppression and sanitization in the UAE since 1979." }, + { property: "og:title", content: "Promist Misting Systems" }, + { property: "og:description", content: "High-pressure misting for cooling, humidification and dust suppression." }, { property: "og:type", content: "website" }, { name: "twitter:card", content: "summary_large_image" }, - { name: "twitter:site", content: "@Lovable" }, ], links: [ - { - rel: "stylesheet", - href: appCss, - }, + { rel: "stylesheet", href: appCss }, { rel: "icon", href: "/favicon.ico", type: "image/x-icon" }, + { 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=Hanken+Grotesk:wght@300;400;500;600;700;800;900&display=swap" }, ], }), shellComponent: RootShell, @@ -103,24 +216,22 @@ export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()( function RootShell({ children }: { children: ReactNode }) { return ( - - - - - {children} - - + + {children} ); } function RootComponent() { const { queryClient } = Route.useRouteContext(); - return ( - {/* Required: nested routes render here. Removing breaks all child routes. */} - + +
+
+ +
+