generated from nhcarrigan/template
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
/**
|
|
* @copyright nhcarrigan
|
|
* @license Naomi's Public License
|
|
* @author Naomi Carrigan
|
|
*/
|
|
import { Inter } from "next/font/google";
|
|
import Script from "next/script";
|
|
import type { Metadata } from "next";
|
|
import type { JSX, ReactNode } from "react";
|
|
// eslint-disable-next-line import/no-unassigned-import -- Import global styles.
|
|
import "./globals.css";
|
|
|
|
// eslint-disable-next-line new-cap -- This is a function call.
|
|
const inter = Inter({ subsets: [ "latin" ] });
|
|
|
|
const metadata: Metadata = {
|
|
description:
|
|
"The personal musings of a transfem software engineer.",
|
|
openGraph: {
|
|
images: "https://cdn.nhcarrigan.com/og-image.png",
|
|
},
|
|
title: "Naomi's Blog",
|
|
twitter: {
|
|
card: "summary_large_image",
|
|
images: "https://cdn.nhcarrigan.com/og-image.png",
|
|
site: "@naomi_lgbt",
|
|
},
|
|
};
|
|
|
|
/**
|
|
* The top-level wrapper for the React application.
|
|
* Handles mounting the shadow DOM.
|
|
* @param opts - The rendering options.
|
|
* @param opts.children - The children elements to render.
|
|
* @returns A JSX element.
|
|
*/
|
|
const RootLayout = ({
|
|
children,
|
|
}: Readonly<{
|
|
children: ReactNode;
|
|
}>): JSX.Element => {
|
|
return (
|
|
<html lang="en">
|
|
<Script
|
|
async={true}
|
|
defer={true}
|
|
src="https://cdn.nhcarrigan.com/headers/index.js"
|
|
strategy={"afterInteractive"}
|
|
type="text/javascript"
|
|
></Script>
|
|
<link
|
|
href="https://cdn.nhcarrigan.com/logo.png"
|
|
rel="icon"
|
|
sizes="any"
|
|
/>
|
|
<body className={inter.className}>
|
|
{children}
|
|
</body>
|
|
</html>
|
|
);
|
|
};
|
|
|
|
export { metadata };
|
|
export default RootLayout;
|