diff --git a/src/app/conf/2024/venue.tsx b/src/app/conf/2024/venue.tsx index 866884669e..53ed935baa 100644 --- a/src/app/conf/2024/venue.tsx +++ b/src/app/conf/2024/venue.tsx @@ -1,4 +1,4 @@ -import { TrainIcon, AroundIcon, ParkingIcon, BusIcon } from "@/icons" +import { TrainIcon, AroundIcon, ParkingIcon } from "@/icons" import NextImage from "next-image-export-optimizer" import cityViewImage from "./sf-city-view.jpeg" diff --git a/src/app/conf/2025/components/call-for-proposals.tsx b/src/app/conf/2025/components/call-for-proposals.tsx index a09fadc171..a0fe219db6 100644 --- a/src/app/conf/2025/components/call-for-proposals.tsx +++ b/src/app/conf/2025/components/call-for-proposals.tsx @@ -1,10 +1,11 @@ "use client" -import clsx from "clsx" -import { useState, useEffect, ReactNode, Fragment } from "react" +import clsx from "clsx" +import { useState, useEffect, Fragment } from "react" import Link from "next/link" -import { Button } from "../../_design-system/button" -import ArrowDownIcon from "../pixelarticons/arrow-down.svg?svgr" + +import ArrowDownIcon from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" +import { Button } from "@/app/conf/_design-system/button" function DatesTab() { return ( diff --git a/src/app/conf/2025/components/hero/index.tsx b/src/app/conf/2025/components/hero/index.tsx index 5cac0ba2a3..aab17fa7e9 100644 --- a/src/app/conf/2025/components/hero/index.tsx +++ b/src/app/conf/2025/components/hero/index.tsx @@ -1,9 +1,9 @@ import Image from "next-image-export-optimizer" import { Button } from "../../../_design-system/button" -import { CalendarIcon } from "../../pixelarticons/calendar-icon" +import { CalendarIcon } from "../../../_design-system/pixelarticons/calendar-icon" import { GET_TICKETS_LINK } from "../../links" -import { PinIcon } from "../../pixelarticons/pin-icon" +import { PinIcon } from "../../../_design-system/pixelarticons/pin-icon" import graphqlFoundationWordmarkSvg from "../../assets/graphql-foundation-wordmark.svg" import { ImageLoaded } from "../image-loaded" diff --git a/src/app/conf/2025/components/marquee-rows/index.tsx b/src/app/conf/2025/components/marquee-rows/index.tsx index 5706113f3f..38906c5fe5 100644 --- a/src/app/conf/2025/components/marquee-rows/index.tsx +++ b/src/app/conf/2025/components/marquee-rows/index.tsx @@ -1,12 +1,11 @@ +import { clsx } from "clsx" import { Fragment, ReactNode } from "react" import { Marquee } from "@/app/conf/_design-system/marquee" - -import CodeIcon from "../../pixelarticons/code.svg?svgr" +import CodeIcon from "@/app/conf/_design-system/pixelarticons/code.svg?svgr" +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" import blurWave from "./blur.webp" -import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" -import { clsx } from "clsx" export interface MarqueeRowsProps extends React.HTMLAttributes { items: ReactNode[][] diff --git a/src/app/conf/2025/components/navbar.tsx b/src/app/conf/2025/components/navbar.tsx index 2edbacc0a0..a2b36ae5d0 100644 --- a/src/app/conf/2025/components/navbar.tsx +++ b/src/app/conf/2025/components/navbar.tsx @@ -1,14 +1,13 @@ "use client" import { ReactElement, useCallback, useEffect, useState } from "react" -import NextLink from "next/link" import { clsx } from "clsx" import { usePathname } from "next/navigation" import { Badge } from "../../_components/badge" -import MenuIcon from "../pixelarticons/menu.svg?svgr" -import CloseIcon from "../pixelarticons/close.svg?svgr" +import MenuIcon from "@/app/conf/_design-system/pixelarticons/menu.svg?svgr" +import CloseIcon from "@/app/conf/_design-system/pixelarticons/close.svg?svgr" import { GraphQLConfLogoLink } from "./graphql-conf-logo-link" import { Anchor } from "../../_design-system/anchor" diff --git a/src/app/conf/2025/components/sponsors.tsx b/src/app/conf/2025/components/sponsors.tsx index 8d0f29a685..b23c152cba 100644 --- a/src/app/conf/2025/components/sponsors.tsx +++ b/src/app/conf/2025/components/sponsors.tsx @@ -1,7 +1,7 @@ import Grafbase from "public/img/conf/Sponsors/Grafbase.svg?svgr" import { clsx } from "clsx" -import { ChevronRight } from "../pixelarticons/chevron-right" +import { ChevronRight } from "../../_design-system/pixelarticons/chevron-right" interface Sponsor { icon: React.FC> diff --git a/src/app/conf/2025/components/venue/index.tsx b/src/app/conf/2025/components/venue/index.tsx new file mode 100644 index 0000000000..e35c13cd54 --- /dev/null +++ b/src/app/conf/2025/components/venue/index.tsx @@ -0,0 +1,152 @@ +import { clsx } from "clsx" + +import { Button } from "@/app/conf/_design-system/button" +import { Accordion } from "@/app/conf/_design-system/accordion" + +import locationPhoto from "./location-photo.webp" + +export interface VenueProps extends React.HTMLAttributes {} + +export function Venue(props: VenueProps) { + return ( +
+
+
+
+

+ A place of innovation & creation +

+

+ A former warehouse, located in an industrial area near the Amsterdam + city centre, changed into a place of culture & business. +

+
+

+ Pakhuis De Zwijger
+ Piet Heinkade 179, 1019 HC
+ Amsterdam, Netherlands +

+ +
+
+

How to get to the venue?

+ + Take tram 26 from Amsterdam Central Station to the + "Kattenburgerstraat" stop. +
+ The venue is in front of the tram stop. + + ), + }, + { + title: "Airport Information", + description: + "Amsterdam Airport Schiphol is about 20 km from the venue. Take a direct train to Amsterdam Central Station, then follow the public transportation instructions.", + }, + { + title: "Parking at venue", + description: ( + <> + Limited parking is available at the venue. We recommend + using public transportation when possible. Learn more about + parking at{" "} + + Pakhuis de Zwijger + + . If you require an accessible parking spot, park at + Vriesseveem 4 or Withoedenveem 16 where you can park if you + have a Disability Parking Card. + + ), + }, + ]} + /> +

Where to stay?

+ + Piet Heinkade 11 +
+ 1019 BR Amsterdam, Netherlands +
+ Phone:{" "} + + +31 20 519 1200 + + + ), + }, + { + title: "Inntel Hotels Amsterdam Landmark", + link: "https://www.inntelhotelsamsterdamlandmark.nl/", + description: ( + <> + VOC-kade 600 +
+ 1018 LG Amsterdam, Netherlands +
+ Phone:{" "} + + +31 20 227 2550 + + + ), + }, + { + title: "DoubleTree by Hilton Amsterdam Central Station", + link: "https://www.hilton.com/en/hotels/amscsdi-doubletree-amsterdam-centraal-station/?SEO_id=GMB-EMEA-DI-AMSCSDI", + description: ( + <> + Oosterdoksstraat 4
+ 1011 DK Amsterdam, Netherlands +
+ Phone:{" "} + + +31 20 530 0800 + + + ), + }, + ]} + /> +
+
+
+ ) +} diff --git a/src/app/conf/2025/components/venue/location-photo.webp b/src/app/conf/2025/components/venue/location-photo.webp new file mode 100644 index 0000000000..5bb3e21f34 Binary files /dev/null and b/src/app/conf/2025/components/venue/location-photo.webp differ diff --git a/src/app/conf/2025/faq.tsx b/src/app/conf/2025/faq.tsx index 115c5a4145..917c3000dc 100644 --- a/src/app/conf/2025/faq.tsx +++ b/src/app/conf/2025/faq.tsx @@ -1,5 +1,6 @@ import clsx from "clsx" -import ArrowDown from "./pixelarticons/arrow-down.svg?svgr" + +import ArrowDown from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" const FAQS = [ { diff --git a/src/app/conf/2025/page.tsx b/src/app/conf/2025/page.tsx index 8e2371b46e..686f40afc5 100644 --- a/src/app/conf/2025/page.tsx +++ b/src/app/conf/2025/page.tsx @@ -1,6 +1,6 @@ import { Metadata } from "next" import { BecomeASponsor } from "./components/become-a-sponsor" -import { Venue } from "./venue" +import { Venue } from "./components/venue" import { FAQ } from "./faq" import { CallForProposals } from "./components/call-for-proposals" import { RegisterToday } from "./components/register-today" diff --git a/src/app/conf/2025/venue.tsx b/src/app/conf/2025/venue.tsx deleted file mode 100644 index 99cd595692..0000000000 --- a/src/app/conf/2025/venue.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { - BusFront, - ExternalLink, - SquareParking, - TicketsPlane, -} from "lucide-react" -import Link from "next/link" - -const HOTELS = [ - { - name: "Mövenpick Hotel Amsterdam City Centre", - link: "https://movenpick.accor.com/en/europe/netherlands/amsterdam/hotel-amsterdam.html?utm_source=google&utm_medium=local&utm_campaign=hotel-MHR-Amsterdam-city-center&y_source=1_MTUzNjI2OTgtNzE1LWxvY2F0aW9uLndlYnNpdGU%3D", - description: `Piet Heinkade 11\n1019 BR Amsterdam, Netherlands\nPhone: +31 20 519 1200`, - }, - { - name: "Inntel Hotels Amsterdam Landmark", - link: "https://www.inntelhotelsamsterdamlandmark.nl/", - description: `VOC-kade 600\n1018 LG Amsterdam, Netherlands\nPhone: +31 20 227 2550`, - }, - { - name: "DoubleTree by Hilton Amsterdam Central Station", - link: "https://www.hilton.com/en/hotels/amscsdi-doubletree-amsterdam-centraal-station/?SEO_id=GMB-EMEA-DI-AMSCSDI", - description: `Oosterdoksstraat 4 \n1011 DK Amsterdam, Netherlands\nPhone: +31 20 530 0800`, - }, -] - -const HOW_TO_GET_TO_VENUE = [ - { - title: "Public Transportation", - description: - 'Take tram 26 from Amsterdam Central Station to the "Kattenburgerstraat" stop. The venue is in front of the tram stop.', - icon: , - }, - { - title: "Airport Information", - description: - "Amsterdam Airport Schiphol is about 20 km from the venue. Take a direct train to Amsterdam Central Station, then follow the public transportation instructions.", - icon: , - }, - { - title: "Parking at venue", - description: `Limited parking is available at the venue. We recommend using public transportation when possible. Learn more about parking at Pakhuis de Zwijger. If you require an accessible parking spot, park at Vriesseveem 4 or Withoedenveem 16 where you can park if you have a Disability Parking Card.`, - icon: , - }, -] - -export function Venue() { - return ( -
-
-
-

Venue

-
- - Pakhuis De Zwijger - -
Piet Heinkade 179, 1019 HC
- Amsterdam, Netherlands -
-
-

- How to get to the venue? -

- {HOW_TO_GET_TO_VENUE.map(({ title, description, icon }) => ( -
-
-
{icon}
-
{title}
-
-

-

- ))} -
-
- -
-

Hotel Information

-

- The Linux Foundation has not contracted rooms at these properties - and cannot guarantee rates or availability. -

-
- {HOTELS.map(hotel => ( -
- - - {hotel.name} - - - - -
- ))} -
-
-
-
- ) -} diff --git a/src/app/conf/_design-system/accordion.tsx b/src/app/conf/_design-system/accordion.tsx new file mode 100644 index 0000000000..180be81fd7 --- /dev/null +++ b/src/app/conf/_design-system/accordion.tsx @@ -0,0 +1,69 @@ +"use client" + +import clsx from "clsx" + +import ArrowDown from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" +import ExternalLink from "@/app/conf/_design-system/pixelarticons/external-link.svg?svgr" + +import { Anchor } from "./anchor" + +export interface AccordionItem { + title: string + description: React.ReactNode + link?: string +} + +export interface AccordionProps extends React.HTMLAttributes { + items: AccordionItem[] + multiple?: boolean +} + +export function Accordion({ + items, + multiple = false, + className, + ...rest +}: AccordionProps) { + return ( +
+ {items.map((item, index) => ( +
{ + if (!multiple) { + const allDetails = + event.currentTarget.parentElement?.querySelectorAll("details") + if (allDetails) { + allDetails.forEach(details => { + if (details !== event.currentTarget) { + details.open = false + } + }) + } + } + }} + > + + {item.title} + + +
+
+ {item.description} +
+ {item.link && ( + + + + )} +
+
+ ))} +
+ ) +} diff --git a/src/app/conf/2025/pixelarticons/arrow-down.svg b/src/app/conf/_design-system/pixelarticons/arrow-down.svg similarity index 100% rename from src/app/conf/2025/pixelarticons/arrow-down.svg rename to src/app/conf/_design-system/pixelarticons/arrow-down.svg diff --git a/src/app/conf/2025/pixelarticons/calendar-icon.tsx b/src/app/conf/_design-system/pixelarticons/calendar-icon.tsx similarity index 100% rename from src/app/conf/2025/pixelarticons/calendar-icon.tsx rename to src/app/conf/_design-system/pixelarticons/calendar-icon.tsx diff --git a/src/app/conf/2025/pixelarticons/chevron-right.tsx b/src/app/conf/_design-system/pixelarticons/chevron-right.tsx similarity index 100% rename from src/app/conf/2025/pixelarticons/chevron-right.tsx rename to src/app/conf/_design-system/pixelarticons/chevron-right.tsx diff --git a/src/app/conf/2025/pixelarticons/close.svg b/src/app/conf/_design-system/pixelarticons/close.svg similarity index 100% rename from src/app/conf/2025/pixelarticons/close.svg rename to src/app/conf/_design-system/pixelarticons/close.svg diff --git a/src/app/conf/2025/pixelarticons/code.svg b/src/app/conf/_design-system/pixelarticons/code.svg similarity index 100% rename from src/app/conf/2025/pixelarticons/code.svg rename to src/app/conf/_design-system/pixelarticons/code.svg diff --git a/src/app/conf/_design-system/pixelarticons/external-link.svg b/src/app/conf/_design-system/pixelarticons/external-link.svg new file mode 100644 index 0000000000..f049b87933 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/external-link.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/app/conf/2025/pixelarticons/menu.svg b/src/app/conf/_design-system/pixelarticons/menu.svg similarity index 100% rename from src/app/conf/2025/pixelarticons/menu.svg rename to src/app/conf/_design-system/pixelarticons/menu.svg diff --git a/src/app/conf/2025/pixelarticons/pin-icon.tsx b/src/app/conf/_design-system/pixelarticons/pin-icon.tsx similarity index 100% rename from src/app/conf/2025/pixelarticons/pin-icon.tsx rename to src/app/conf/_design-system/pixelarticons/pin-icon.tsx