@@ -10,24 +10,28 @@ import tenmaiGopal from "./speakers/tenmai-gopal.webp"
10
10
import uriGoldshtein from "./speakers/uri-goldshtein.webp"
11
11
import TwitterIcon from "@/icons/twitter.svg"
12
12
import { Button } from "@/app/conf/_design-system/button"
13
+ import { BECOME_A_SPEAKER_LINK } from "../../links"
13
14
14
- interface TopMindsSectionProps extends HTMLAttributes < HTMLElement > { }
15
+ interface TopMindsSectionProps extends HTMLAttributes < HTMLElement > {
16
+ hasSpeakersPage ?: boolean
17
+ }
15
18
16
19
export default function TopMindsSection ( {
17
20
className,
21
+ hasSpeakersPage,
18
22
...rest
19
23
} : TopMindsSectionProps ) {
20
24
return (
21
25
< section
22
26
className = { clsx (
23
- "px-4 py-8 text-neu-900 max-md:flex-col lg:px-12 xl:gap-x-24 xl:px-24" ,
27
+ "flex justify-center px-4 py-8 text-neu-900 max-md:flex-col lg:px-12 xl:gap-x-24 xl:px-24" ,
24
28
className ,
25
29
) }
26
30
{ ...rest }
27
31
>
28
- < div className = "mx-auto flex flex-wrap max-sm:flex-col [@media(width<907px )]:gap-y-6 [@media(width>=907px )]:*:border-b-0" >
32
+ < div className = "flex flex-wrap max-sm:flex-col [@media(width<=743px )]:justify-center [@media(width>=970px )]:*:border-b-0" >
29
33
{ /* todo: remaining socials */ }
30
- < h3 className = "mr-auto flex text-pretty pb-6 pr-6 typography-h2 [@media(width<907px)]:w-full [@media(width>=907px )]:w-[400px] " >
34
+ < h3 className = "mr-auto flex w-full grow text-pretty pb-6 pr-6 typography-h2 [@media(width>857px )]:basis-0 " >
31
35
Meet the top industry minds
32
36
</ h3 >
33
37
< SpeakerCard
@@ -43,21 +47,21 @@ export default function TopMindsSection({
43
47
src = { elizabethStone }
44
48
linkedin = "elizabeth-stone-608a754"
45
49
/>
46
- < div className = "flex grow border-sec-dark [@media(width<907px )]:contents [@media(width>=907px )]:border-t [@media(width>=907px )]:*:border-t-0" >
50
+ < div className = "flex grow border-sec-dark [@media(width<970px )]:contents [@media(width>=970px )]:border-t [@media(width>=970px )]:*:border-t-0" >
47
51
< SpeakerCard
48
52
name = "Kamil Kisiela"
49
53
title = "The Guild — Developer"
50
54
src = { kamilKisiela }
51
55
linkedin = "kamilkisiela"
52
56
twitter = "kamilkisiela"
53
- className = "[@media(744px<=width<=907px )]:first-of-type:border-l-0"
57
+ className = "[@media(744px<=width<=970px )]:first-of-type:border-l-0"
54
58
/>
55
59
< SpeakerCard
56
60
name = "Rajeev Rajan"
57
61
title = "Atlassian — CTO"
58
62
src = { rajeevRajan }
59
63
linkedin = "rajeev-rajan"
60
- className = "[@media(744px<=width<=907px )]:border-l"
64
+ className = "[@media(744px<=width<=970px )]:border-l"
61
65
/>
62
66
< SpeakerCard
63
67
name = "Tenmai Gopal"
@@ -67,8 +71,16 @@ export default function TopMindsSection({
67
71
linkedin = "tanmaig"
68
72
className = "[@media(width<744px)]:border-l"
69
73
/>
70
- < div className = "mt-6 flex grow basis-[content] items-end justify-stretch pl-6 max-lg:w-full sm:justify-end" >
71
- < Button variant = "secondary" > View all speakers</ Button >
74
+ < div className = "mt-6 flex shrink-0 basis-[content] items-end justify-stretch max-lg:w-full max-sm:*:w-full sm:justify-end sm:pl-6 [@media(640px<=width<=855px)]:basis-[236px] [@media(width>855px)]:grow" >
75
+ { hasSpeakersPage ? (
76
+ < Button variant = "secondary" href = "/conf/2025/speakers/" >
77
+ View all speakers
78
+ </ Button >
79
+ ) : (
80
+ < Button variant = "secondary" href = { BECOME_A_SPEAKER_LINK } >
81
+ Become a speaker
82
+ </ Button >
83
+ ) }
72
84
</ div >
73
85
</ div >
74
86
</ div >
@@ -94,7 +106,7 @@ function SpeakerCard({
94
106
return (
95
107
< article
96
108
className = { clsx (
97
- ":border-r shrink-0 border-y border-r border-sec-dark first-of-type:border-l" ,
109
+ ":border-r shrink-0 border-y border-r border-sec-dark first-of-type:border-l max-sm:border-l " ,
98
110
className ,
99
111
) }
100
112
>
@@ -103,15 +115,15 @@ function SpeakerCard({
103
115
alt = ""
104
116
width = { 236 }
105
117
height = { 236 }
106
- className = "aspect-square w-full object-cover transition-transform sm:size-[236px]"
118
+ className = "aspect-square size-[312px] w-full object-cover transition-transform sm:size-[236px]"
107
119
/>
108
120
< div className = "flex items-stretch border-t border-sec-dark" >
109
- < div className = "flex h-[80px] grow flex-col justify-center gap-1 p-3" >
121
+ < div className = "flex grow flex-col justify-center gap-1 p-3 sm:h-[80px] " >
110
122
< h4 className = "typography-body-md" > { name } </ h4 >
111
123
< p className = "text-neu-700 typography-body-xs" > { title } </ p >
112
124
</ div >
113
125
{ ( linkedin || twitter ) && (
114
- < div className = "flex items-center border-l border-sec-dark sm:flex-col sm:border-l" >
126
+ < div className = "flex items-center border-l border-sec-dark max- sm:divide-x sm: flex-col sm:divide-y sm:border-l" >
115
127
{ linkedin && (
116
128
< a
117
129
href = { `https://www.linkedin.com/in/${ linkedin } ` }
@@ -127,7 +139,7 @@ function SpeakerCard({
127
139
href = { `https://x.com/${ twitter } ` }
128
140
target = "_blank"
129
141
rel = "noopener noreferrer"
130
- className = "flex grow items-center justify-center p-4 transition-colors hover:bg-neu-900/10 hover:text-neu-700 sm:p-2"
142
+ className = "flex grow items-center justify-center border-sec-dark p-4 transition-colors hover:bg-neu-900/10 hover:text-neu-700 sm:p-2"
131
143
>
132
144
< TwitterIcon className = "size-6" />
133
145
</ a >
0 commit comments