diff --git a/src/app/conf/2025/components/footer/blur-bean.webp b/src/app/conf/2025/components/footer/blur-bean.webp new file mode 100644 index 0000000000..899304aa38 Binary files /dev/null and b/src/app/conf/2025/components/footer/blur-bean.webp differ diff --git a/src/app/conf/2025/components/footer/index.tsx b/src/app/conf/2025/components/footer/index.tsx new file mode 100644 index 0000000000..485f70a7d1 --- /dev/null +++ b/src/app/conf/2025/components/footer/index.tsx @@ -0,0 +1,164 @@ +import NextLink from "next/link" +import { ReactNode } from "react" +import { clsx } from "clsx" + +import { SocialIcons } from "../../../_components/social-icons" + +import blurBean from "./blur-bean.webp" + +interface FooterLink { + href: string + children: ReactNode + disabled?: boolean +} + +export function Footer({ + links, + logo, +}: { + links: (FooterLink | FooterLink[])[] + logo: ReactNode +}) { + return ( + + ) +} + +const maskEven = + "repeating-linear-gradient(to right, transparent, transparent 12px, black 12px, black 24px)" +const maskOdd = + "repeating-linear-gradient(to right, black, black 12px, transparent 12px, transparent 24px)" + +function Stripes() { + return ( +
+
+
+
+ ) +} + +function FooterBox({ box }: { box: FooterLink | FooterLink[] }) { + if (Array.isArray(box)) { + return ( +
+ {box.map(link => ( + + {link.children} + + ))} +
+ ) + } + + const { href, children, disabled } = box + + return ( + + {children} + + ) +} diff --git a/src/app/conf/2025/components/graphql-conf-logo-link.tsx b/src/app/conf/2025/components/graphql-conf-logo-link.tsx new file mode 100644 index 0000000000..1862f2f45a --- /dev/null +++ b/src/app/conf/2025/components/graphql-conf-logo-link.tsx @@ -0,0 +1,52 @@ +import NextLink from "next/link" +import { clsx } from "clsx" + +export interface GraphQLConfLogoLinkProps + extends React.HTMLAttributes { + year: number +} + +export function GraphQLConfLogoLink({ + className, + year, + ...rest +}: GraphQLConfLogoLinkProps) { + return ( +
+ + + + / + + GraphQLConf {year} + +
+ ) +} + +function GraphQLLogo(props: React.SVGProps) { + return ( + + + + + + + + + + ) +} diff --git a/src/app/conf/2025/components/navbar.tsx b/src/app/conf/2025/components/navbar.tsx index 914b7edcb8..bf05f34254 100644 --- a/src/app/conf/2025/components/navbar.tsx +++ b/src/app/conf/2025/components/navbar.tsx @@ -9,6 +9,7 @@ import { Badge } from "../../_components/badge" import MenuIcon from "../pixelarticons/menu.svg?svgr" import CloseIcon from "../pixelarticons/close.svg?svgr" +import { GraphQLConfLogoLink } from "./graphql-conf-logo-link" export interface NavbarProps { links: { href: string; children: React.ReactNode; "aria-disabled"?: true }[] @@ -49,18 +50,7 @@ export function Navbar({ links, year }: NavbarProps): ReactElement { >
-
- - - - / - - GraphQLConf {year} - -
+

@@ -127,24 +117,6 @@ export function Navbar({ links, year }: NavbarProps): ReactElement { ) } -function GraphQLLogo(props: React.SVGProps) { - return ( - - - - - - - - - - ) -} - function BackdropBlur() { const mask = "linear-gradient(to bottom,#000 0% 50%, transparent 50% 100%)" return ( diff --git a/src/app/conf/2025/layout.tsx b/src/app/conf/2025/layout.tsx index 271ae1807c..bdd77b4c68 100644 --- a/src/app/conf/2025/layout.tsx +++ b/src/app/conf/2025/layout.tsx @@ -1,14 +1,15 @@ import { ReactElement, ReactNode } from "react" import { Metadata } from "next" -import { Footer } from "../_components/footer" -import { GraphQLConf, HostedByGraphQLFoundation } from "@/icons" -import NextLink from "next/link" + import { NewFontsStyleTag } from "../../fonts" import "../../colors.css" + import { Navbar } from "./components/navbar" +import { Footer } from "./components/footer" // @ts-expect-error: we want to import the same version as Nextra for the main page import { ThemeProvider } from "next-themes" +import { GraphQLConfLogoLink } from "./components/graphql-conf-logo-link" export const metadata = { description: @@ -51,28 +52,16 @@ export default function Layout({

{children}