layout.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* eslint-disable @next/next/no-page-custom-font */
  2. import "./styles/globals.scss";
  3. import "./styles/markdown.scss";
  4. import "./styles/highlight.scss";
  5. import { getClientConfig } from "./config/client";
  6. import type { Metadata, Viewport } from "next";
  7. import { SpeedInsights } from "@vercel/speed-insights/next";
  8. import { getServerSideConfig } from "./config/server";
  9. import { GoogleTagManager } from "@next/third-parties/google";
  10. const serverConfig = getServerSideConfig();
  11. export const metadata: Metadata = {
  12. title: "建科·小智",
  13. description: "",
  14. appleWebApp: {
  15. title: "建科·小智",
  16. statusBarStyle: "default",
  17. },
  18. };
  19. export const viewport: Viewport = {
  20. width: "device-width",
  21. initialScale: 1,
  22. maximumScale: 1,
  23. themeColor: [
  24. { media: "(prefers-color-scheme: light)", color: "#fafafa" },
  25. { media: "(prefers-color-scheme: dark)", color: "#151515" },
  26. ],
  27. };
  28. export default function RootLayout({
  29. children,
  30. }: {
  31. children: React.ReactNode;
  32. }) {
  33. return (
  34. <html lang="en">
  35. <head>
  36. <meta name="config" content={JSON.stringify(getClientConfig())}/>
  37. <meta
  38. name="viewport"
  39. content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
  40. />
  41. <meta name="mobile-web-app-capable" content="yes"/>
  42. <link rel="manifest" href="/site.webmanifest"></link>
  43. <script src="/serviceWorkerRegister.js" defer></script>
  44. </head>
  45. <body>
  46. <>
  47. {children}
  48. </>
  49. {serverConfig?.isVercel && (
  50. <>
  51. <SpeedInsights />
  52. </>
  53. )}
  54. {serverConfig?.gtmId && (
  55. <>
  56. <GoogleTagManager gtmId={serverConfig.gtmId} />
  57. </>
  58. )}
  59. </body>
  60. </html>
  61. );
  62. }