index.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { GoogleAnalytics } from "@next/third-parties/google";
  2. import clsx from "clsx";
  3. import { Red_Hat_Text, Red_Hat_Mono } from "next/font/google";
  4. import type { ReactNode } from "react";
  5. import {
  6. IS_PRODUCTION_SERVER,
  7. GOOGLE_ANALYTICS_ID,
  8. AMPLITUDE_API_KEY,
  9. WALLETCONNECT_PROJECT_ID,
  10. MAINNET_RPC,
  11. } from "../../config/server";
  12. import { LoggerProvider } from "../../hooks/use-logger";
  13. import { StakeAccountProvider } from "../../hooks/use-stake-account";
  14. import { Amplitude } from "../Amplitude";
  15. import { Footer } from "../Footer";
  16. import { Header } from "../Header";
  17. import { MaxWidth } from "../MaxWidth";
  18. import { ReportAccessibility } from "../ReportAccessibility";
  19. import { WalletProvider } from "../WalletProvider";
  20. const redHatText = Red_Hat_Text({
  21. subsets: ["latin"],
  22. variable: "--font-sans",
  23. });
  24. const redHatMono = Red_Hat_Mono({
  25. subsets: ["latin"],
  26. variable: "--font-mono",
  27. });
  28. type Props = {
  29. children: ReactNode;
  30. };
  31. export const Root = ({ children }: Props) => (
  32. <LoggerProvider>
  33. <WalletProvider
  34. walletConnectProjectId={WALLETCONNECT_PROJECT_ID}
  35. rpc={MAINNET_RPC}
  36. >
  37. <StakeAccountProvider>
  38. <html
  39. lang="en"
  40. dir="ltr"
  41. className={clsx(redHatText.variable, redHatMono.variable)}
  42. >
  43. <body className="grid min-h-dvh grid-rows-[auto_1fr_auto] text-pythpurple-100 [background:radial-gradient(113.49%_134.57%_at_5.57%_97.67%,_rgba(17,_15,_35,_0.00)_0%,_rgba(119,_49,_234,_0.20)_100%),_#0A0814] selection:bg-pythpurple-600/60">
  44. <Header className="z-10" />
  45. <MaxWidth className="my-4">{children}</MaxWidth>
  46. <Footer className="z-10" />
  47. </body>
  48. {GOOGLE_ANALYTICS_ID && (
  49. <GoogleAnalytics gaId={GOOGLE_ANALYTICS_ID} />
  50. )}
  51. {AMPLITUDE_API_KEY && <Amplitude apiKey={AMPLITUDE_API_KEY} />}
  52. {!IS_PRODUCTION_SERVER && <ReportAccessibility />}
  53. </html>
  54. </StakeAccountProvider>
  55. </WalletProvider>
  56. </LoggerProvider>
  57. );