@@ -16,8 +16,24 @@ import EscapeTechnologies from "public/img/conf/Partners/EscapeTechnologies.svg"
1616import AmsterdamGraphQL from "public/img/conf/Partners/AmsterdamGraphQL.svg"
1717import BangkokGraphQL from "public/img/conf/Partners/BangkokGraphQL.svg"
1818import TypeGraphQL from "public/img/conf/Partners/TypeGraphQL.svg"
19- import { clsx } from "clsx"
2019import NextImage from "next-image-export-optimizer"
20+ import { clsx } from "clsx"
21+
22+ // Component for the small triangle icon before tier labels
23+ function TierIcon ( ) {
24+ return (
25+ < svg
26+ width = "8"
27+ height = "10"
28+ viewBox = "0 0 8 10"
29+ fill = "none"
30+ xmlns = "http://www.w3.org/2000/svg"
31+ className = "mr-1 inline-block h-auto w-2 fill-primary"
32+ >
33+ < path d = "M7.5 5L6.11959e-07 10L0 0L7.5 5Z" />
34+ </ svg >
35+ )
36+ }
2137
2238interface Image {
2339 icon : string
@@ -86,104 +102,109 @@ function List({
86102 className,
87103 linkClassName,
88104} : {
89- className ?: string
90105 items : Image [ ]
106+ className ?: string
91107 linkClassName ?: string
92108} ) {
93109 return (
94- < div className = { clsx ( "grid w-full gap-7 " , className ) } >
110+ < div className = { clsx ( "flex flex-row flex-wrap gap-x-8 gap-y-4 " , className ) } >
95111 { items . map ( ( { link, icon, name } , i ) => (
96112 < a
97113 key = { i }
98- className = { clsx (
99- "relative shrink-0 rounded-md bg-[#251f30]" ,
100- "flex justify-center" ,
101- "border border-solid border-transparent hover:border-primary focus:border-primary" ,
102- "transition-colors" ,
103- "shadow-md outline-none hover:shadow-primary/20 focus:shadow-primary/20" ,
104- linkClassName ,
105- ) }
106114 href = { link }
107115 target = "_blank"
108116 rel = "noreferrer"
109117 title = { name }
118+ className = { clsx (
119+ "flex h-24 w-72 items-center justify-center" ,
120+ linkClassName ,
121+ ) }
110122 >
111123 < NextImage
112124 alt = { `${ name } logo` }
113125 src = { icon }
114- className = "h- auto shrink lg: max-w-60 "
126+ className = "max-h-16 w- auto max-w-[80%] shrink-0 object-contain text-neu-600 "
115127 />
116- < span className = "absolute right-5 top-5 font-sans leading-none text-white lg:text-2xl" >
117- ↗
118- </ span >
119128 </ a >
120129 ) ) }
121130 </ div >
122131 )
123132}
124133
125- const classes = {
126- heading :
127- "text-center text-primary text-2xl lg:text-3xl font-bold mb-10 mt-20" ,
128- title : "md:text-center text-white conf-heading" ,
129- }
130-
131134export interface SponsorsProps {
132135 heading ?: string
133136}
134137
138+ // --- Data structure for Tiers ---
139+ interface Tier {
140+ name : string
141+ items : Image [ ]
142+ }
143+
144+ const sponsorTiers : Tier [ ] = [
145+ {
146+ name : "Diamond" ,
147+ items : sponsorDiamond ,
148+ } ,
149+ {
150+ name : "Platinum" ,
151+ items : sponsorPlatinum ,
152+ } ,
153+ {
154+ name : "Gold" ,
155+ items : sponsorGold ,
156+ } ,
157+ {
158+ name : "Silver" ,
159+ items : sponsorSilver ,
160+ } ,
161+ {
162+ name : "Workshop Day Sponsor" ,
163+ items : workshopDaySponsors ,
164+ } ,
165+ ]
166+
167+ const partnerTiers : Tier [ ] = [
168+ {
169+ name : "Media Partners" ,
170+ items : mediaPartners ,
171+ } ,
172+ {
173+ name : "Community Partners" ,
174+ items : communityPartners ,
175+ } ,
176+ ]
177+ // --- End Data structure ---
178+
135179export function Sponsors ( { heading } : SponsorsProps ) {
136180 return (
137- < section className = "bg-conf-black" >
138- < h2 className = "typography-h2" > { heading } </ h2 >
139- < div className = "conf-block container" >
140- < h1 className = { classes . title } > Sponsors</ h1 >
141- < h3 className = { classes . heading } > Diamond</ h3 >
142- < List
143- items = { sponsorDiamond }
144- className = "grid-cols-1"
145- linkClassName = "p-8 lg:p-16 h-28 lg:h-[220px]"
146- />
147- < h3 className = { classes . heading } > Platinum</ h3 >
148- < List
149- items = { sponsorPlatinum }
150- className = "grid-cols-2"
151- linkClassName = "p-8 lg:py-14 h-28 lg:h-[210px]"
152- />
153- < h3 className = { classes . heading } > Gold</ h3 >
154- < List
155- items = { sponsorGold }
156- className = "grid-cols-2 xl:grid-cols-3"
157- linkClassName = "p-8 lg:py-14 h-28 lg:h-[170px]"
158- />
159- < h3 className = { classes . heading } > Silver</ h3 >
160- < List
161- items = { sponsorSilver }
162- className = "grid-cols-2 xl:grid-cols-4"
163- linkClassName = "p-6 lg:p-10 h-28 lg:h-[155px]"
164- />
165- < h3 className = { classes . heading } > Workshop Day Sponsor</ h3 >
166- < List
167- items = { workshopDaySponsors }
168- className = "mx-auto grid-cols-2 lg:w-1/2 lg:grid-cols-1"
169- linkClassName = "p-8 lg:p-10 h-28 lg:h-[155px]"
170- />
181+ < section className = "gql-conf-section py-16" >
182+ < h1 className = "typography-h2" > { heading } </ h1 >
183+
184+ < div className = "mt-10 md:mt-16" >
185+ { sponsorTiers . map ( tier => (
186+ < Tier key = { tier . name } tier = { tier } />
187+ ) ) }
171188 </ div >
172- < div className = "container py-24" >
173- < h1 className = { classes . title } > Partners</ h1 >
174- < h3 className = { classes . heading } > Media Partners</ h3 >
175- < List
176- items = { mediaPartners }
177- className = "mx-auto grid-cols-2 xl:w-1/2"
178- linkClassName = "p-9 lg:p-12 h-28 lg:h-[155px]"
179- />
180- < h3 className = { classes . heading } > Community Partners</ h3 >
181- < List
182- items = { communityPartners }
183- className = "grid-cols-2 xl:grid-cols-4"
184- linkClassName = "p-6 lg:p-10 h-28 lg:h-[155px]"
185- />
189+
190+ < div className = "flex flex-col self-stretch border-t border-[#E7E9E2] pt-16" >
191+ < h1 className = "mb-4 text-5xl font-normal text-[#0E0F0B]" > Partners</ h1 >
192+ { partnerTiers . map ( tier => (
193+ < Tier key = { tier . name } tier = { tier } />
194+ ) ) }
186195 </ div >
187196 </ section >
188197 )
189198}
199+
200+ function Tier ( { tier } : { tier : Tier } ) {
201+ return (
202+ < div className = "flex gap-x-12 gap-y-4 border-t border-neu-200 py-4 dark:border-neu-50 max-md:flex-col" >
203+ < h3 className = "min-w-[180px] whitespace-nowrap font-mono text-sm font-normal uppercase text-primary" >
204+ < TierIcon />
205+ { tier . name }
206+ </ h3 >
207+ < List items = { tier . items } />
208+ </ div >
209+ )
210+ }
0 commit comments