@@ -16,8 +16,24 @@ import EscapeTechnologies from "public/img/conf/Partners/EscapeTechnologies.svg"
16
16
import AmsterdamGraphQL from "public/img/conf/Partners/AmsterdamGraphQL.svg"
17
17
import BangkokGraphQL from "public/img/conf/Partners/BangkokGraphQL.svg"
18
18
import TypeGraphQL from "public/img/conf/Partners/TypeGraphQL.svg"
19
- import { clsx } from "clsx"
20
19
import 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
+ }
21
37
22
38
interface Image {
23
39
icon : string
@@ -86,104 +102,109 @@ function List({
86
102
className,
87
103
linkClassName,
88
104
} : {
89
- className ?: string
90
105
items : Image [ ]
106
+ className ?: string
91
107
linkClassName ?: string
92
108
} ) {
93
109
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 ) } >
95
111
{ items . map ( ( { link, icon, name } , i ) => (
96
112
< a
97
113
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
- ) }
106
114
href = { link }
107
115
target = "_blank"
108
116
rel = "noreferrer"
109
117
title = { name }
118
+ className = { clsx (
119
+ "flex h-24 w-72 items-center justify-center" ,
120
+ linkClassName ,
121
+ ) }
110
122
>
111
123
< NextImage
112
124
alt = { `${ name } logo` }
113
125
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 "
115
127
/>
116
- < span className = "absolute right-5 top-5 font-sans leading-none text-white lg:text-2xl" >
117
- ↗
118
- </ span >
119
128
</ a >
120
129
) ) }
121
130
</ div >
122
131
)
123
132
}
124
133
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
-
131
134
export interface SponsorsProps {
132
135
heading ?: string
133
136
}
134
137
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
+
135
179
export function Sponsors ( { heading } : SponsorsProps ) {
136
180
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
+ ) ) }
171
188
</ 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
+ ) ) }
186
195
</ div >
187
196
</ section >
188
197
)
189
198
}
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