Skip to content

Commit 8ca05a6

Browse files
Basic projector styling with theme switching
1 parent 492515e commit 8ca05a6

File tree

2 files changed

+41
-45
lines changed

2 files changed

+41
-45
lines changed

src/components/Event/EventProjectorOverlay.tsx

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useEffect } from "react";
33
import { LuCalendar } from "react-icons/lu";
44

55
import Brand from "@/components/Common/Brand";
6+
import ThemeToggle from "@/components/Common/ThemeToggle";
67
import type { EventEnriched } from "@/content";
78
import { formatDate, formatTime } from "@/utils/formatDate";
89

@@ -62,92 +63,80 @@ export default function EventProjectorOverlay({
6263
return (
6364
<div
6465
id="projector-overlay"
65-
className="fixed inset-0 z-50 flex h-screen w-screen items-center justify-center bg-black"
66-
data-theme="night"
66+
className="bg-base-100 fixed inset-0 z-50 flex h-screen w-screen items-center justify-center"
6767
data-testid="projector-overlay"
6868
>
6969
<div
70-
className="from-primary to-secondary text-base-100 relative flex bg-gradient-to-br"
70+
className="relative flex"
7171
style={{
7272
width: "100vw",
7373
height: "calc(100vw * 9 / 16)",
7474
maxHeight: "100vh",
7575
maxWidth: "calc(100vh * 16 / 9)",
76-
padding: "4vw",
77-
fontSize: "1vw",
76+
padding: "5vw",
7877
}}
7978
>
8079
{/* Left Column */}
81-
<div className="flex flex-1 flex-col justify-between" style={{ paddingRight: "2vw" }}>
80+
<div className="flex flex-1 flex-col justify-between" style={{ paddingRight: "3vw" }}>
8281
{/* Top: Title and Description */}
8382
<div className="flex flex-col" style={{ gap: "2vw" }}>
8483
<h1
85-
className="line-clamp-3 leading-tight font-bold"
86-
style={{ fontSize: "5vw" }}
84+
className="text-base-content line-clamp-3 leading-tight font-bold"
85+
style={{ fontSize: "4.5vw" }}
8786
data-testid="projector-title"
8887
>
8988
{event.data.title}
9089
</h1>
91-
92-
{event.data.topics && event.data.topics.length > 0 && (
93-
<p
94-
className="line-clamp-2 opacity-80"
95-
style={{ fontSize: "2vw" }}
96-
data-testid="projector-topics"
97-
>
98-
{event.data.topics.join(" • ")}
99-
</p>
100-
)}
10190
</div>
10291

10392
{/* Bottom: Date/Time */}
10493
<div className="flex items-center" style={{ gap: "1.5vw" }}>
10594
<div
106-
className="bg-base-100/20 rounded-box flex flex-shrink-0 items-center justify-center"
107-
style={{ padding: "1vw" }}
95+
className="bg-primary/10 rounded-box flex flex-shrink-0 items-center justify-center"
96+
style={{ width: "4vw", height: "4vw" }}
10897
>
109-
<LuCalendar className="text-base-100" style={{ width: "2vw", height: "2vw" }} />
98+
<LuCalendar className="text-primary" style={{ width: "2vw", height: "2vw" }} />
99+
</div>
100+
<div className="flex flex-col" style={{ gap: "0.3vw" }}>
101+
<span
102+
className="text-base-content font-medium"
103+
style={{ fontSize: "1.8vw" }}
104+
data-testid="projector-datetime"
105+
>
106+
{formattedDate}
107+
</span>
108+
<span className="text-base-content/70" style={{ fontSize: "1.5vw" }}>
109+
{formattedTime}
110+
{event.data.duration && <span>{event.data.duration / 60} hours</span>}
111+
</span>
110112
</div>
111-
<span
112-
className="overflow-hidden font-medium text-ellipsis whitespace-nowrap"
113-
style={{ fontSize: "2vw" }}
114-
data-testid="projector-datetime"
115-
>
116-
{formattedDate}{formattedTime}
117-
{event.data.duration && (
118-
<span className="opacity-70" style={{ fontSize: "1.5vw" }}>
119-
{" "}
120-
({event.data.duration / 60} hours)
121-
</span>
122-
)}
123-
</span>
124113
</div>
125114
</div>
126115

127116
{/* Right Column */}
128-
<div className="flex flex-shrink-0 flex-col justify-between" style={{ width: "25vw" }}>
117+
<div className="flex flex-shrink-0 flex-col justify-between" style={{ width: "30vw" }}>
129118
{/* Top: Branding */}
130119
<div className="flex justify-end">
131-
<div className="transform" style={{ scale: "calc(3vw / 48)" }}>
132-
<Brand />
120+
<div className="text-base-content" style={{ width: "20vw" }}>
121+
<Brand className="w-full" />
133122
</div>
134123
</div>
135124

136125
{/* Bottom: Venue Info */}
137126
{event.venue && (
138-
<div className="self-end" style={{ width: "20vw" }}>
139-
<div className="bg-base-100/20 rounded-box shadow-2xl" style={{ padding: "1.5vw" }}>
127+
<div className="flex flex-col items-end">
128+
<div className="bg-base-200 rounded-box" style={{ padding: "2vw", width: "25vw" }}>
140129
<h3
141-
className="font-bold"
142-
style={{ fontSize: "1.5vw", marginBottom: "0.5vw" }}
130+
className="text-base-content font-bold"
131+
style={{ fontSize: "1.6vw", marginBottom: "0.5vw" }}
143132
data-testid="projector-venue-title"
144133
>
145134
{event.venue.title}
146135
</h3>
147136
{event.venue.address && (
148137
<p
149-
className="opacity-80"
150-
style={{ fontSize: "1.2vw" }}
138+
className="text-base-content/70"
139+
style={{ fontSize: "1.3vw", lineHeight: "1.6" }}
151140
data-testid="projector-venue-address"
152141
>
153142
{event.venue.address}
@@ -158,6 +147,13 @@ export default function EventProjectorOverlay({
158147
)}
159148
</div>
160149
</div>
150+
151+
{/* Theme Switcher - appears on hover */}
152+
<div className="group/theme-toggle absolute right-0 bottom-0 p-6">
153+
<div className="opacity-0 transition-opacity duration-300 group-hover/theme-toggle:opacity-100">
154+
<ThemeToggle testId="projector-theme-toggle" />
155+
</div>
156+
</div>
161157
</div>
162158
);
163159
}

src/styles/utils.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@
6060
margin-top: calc(var(--gap) / 2);
6161
margin-bottom: calc(var(--gap) / 2);
6262

63-
&.first{
63+
&.first {
6464
border-top-left-radius: var(--radius);
6565
margin-top: var(--gap);
6666
}
67-
&.last{
67+
&.last {
6868
border-bottom-left-radius: var(--radius);
6969
margin-bottom: var(--gap);
7070
}

0 commit comments

Comments
 (0)