@prosophia/lab-minimal 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +29 -7
- package/dist/index.d.ts +29 -7
- package/dist/index.js +120 -121
- package/dist/index.mjs +119 -121
- package/dist/layouts/index.js +40 -48
- package/dist/layouts/index.mjs +40 -48
- package/package.json +1 -1
- package/dist/index.css +0 -1060
- package/dist/layouts/index.css +0 -444
package/dist/index.mjs
CHANGED
|
@@ -6,19 +6,13 @@ import { ThemeProvider, useTheme as useTheme2 } from "next-themes";
|
|
|
6
6
|
import Link from "next/link";
|
|
7
7
|
import { useState as useState2, useEffect as useEffect2, useCallback } from "react";
|
|
8
8
|
import { usePathname } from "next/navigation";
|
|
9
|
-
|
|
10
|
-
// src/components/Layout.module.css
|
|
11
|
-
var Layout_default = {};
|
|
9
|
+
import styles2 from "./Layout.module.css";
|
|
12
10
|
|
|
13
11
|
// src/components/ThemeToggle.tsx
|
|
14
12
|
import { useTheme } from "next-themes";
|
|
15
13
|
import { useEffect, useState } from "react";
|
|
16
14
|
import { motion } from "framer-motion";
|
|
17
|
-
|
|
18
|
-
// src/components/ThemeToggle.module.css
|
|
19
|
-
var ThemeToggle_default = {};
|
|
20
|
-
|
|
21
|
-
// src/components/ThemeToggle.tsx
|
|
15
|
+
import styles from "./ThemeToggle.module.css";
|
|
22
16
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
23
17
|
function ThemeToggle() {
|
|
24
18
|
const { theme, setTheme, resolvedTheme } = useTheme();
|
|
@@ -27,7 +21,7 @@ function ThemeToggle() {
|
|
|
27
21
|
setMounted(true);
|
|
28
22
|
}, []);
|
|
29
23
|
if (!mounted) {
|
|
30
|
-
return /* @__PURE__ */ jsx("div", { className:
|
|
24
|
+
return /* @__PURE__ */ jsx("div", { className: styles.togglePlaceholder });
|
|
31
25
|
}
|
|
32
26
|
const isDark = resolvedTheme === "dark";
|
|
33
27
|
const toggleTheme = () => {
|
|
@@ -36,12 +30,12 @@ function ThemeToggle() {
|
|
|
36
30
|
return /* @__PURE__ */ jsx(
|
|
37
31
|
motion.button,
|
|
38
32
|
{
|
|
39
|
-
className:
|
|
33
|
+
className: styles.toggle,
|
|
40
34
|
onClick: toggleTheme,
|
|
41
35
|
"aria-label": `Switch to ${isDark ? "light" : "dark"} mode`,
|
|
42
36
|
whileTap: { scale: 0.95 },
|
|
43
|
-
children: /* @__PURE__ */ jsxs("span", { className:
|
|
44
|
-
/* @__PURE__ */ jsx("span", { className: `${
|
|
37
|
+
children: /* @__PURE__ */ jsxs("span", { className: styles.track, children: [
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: `${styles.icon} ${styles.sunIcon} ${!isDark ? styles.iconActive : ""}`, children: /* @__PURE__ */ jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
45
39
|
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "5" }),
|
|
46
40
|
/* @__PURE__ */ jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
|
|
47
41
|
/* @__PURE__ */ jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
|
|
@@ -55,12 +49,12 @@ function ThemeToggle() {
|
|
|
55
49
|
/* @__PURE__ */ jsx(
|
|
56
50
|
motion.span,
|
|
57
51
|
{
|
|
58
|
-
className:
|
|
52
|
+
className: styles.thumb,
|
|
59
53
|
animate: { x: isDark ? 26 : 0 },
|
|
60
54
|
transition: { type: "spring", stiffness: 500, damping: 30 }
|
|
61
55
|
}
|
|
62
56
|
),
|
|
63
|
-
/* @__PURE__ */ jsx("span", { className: `${
|
|
57
|
+
/* @__PURE__ */ jsx("span", { className: `${styles.icon} ${styles.moonIcon} ${isDark ? styles.iconActive : ""}`, children: /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }) })
|
|
64
58
|
] })
|
|
65
59
|
}
|
|
66
60
|
);
|
|
@@ -112,8 +106,8 @@ function Header({ settings }) {
|
|
|
112
106
|
if (href === "/") return pathname === "/";
|
|
113
107
|
return pathname.startsWith(href);
|
|
114
108
|
};
|
|
115
|
-
return /* @__PURE__ */ jsx2("header", { className: `${
|
|
116
|
-
/* @__PURE__ */ jsxs2(Link, { href: "/", className:
|
|
109
|
+
return /* @__PURE__ */ jsx2("header", { className: `${styles2.header} ${scrolled ? styles2.headerScrolled : ""}`, children: /* @__PURE__ */ jsxs2("div", { className: styles2.navContainer, children: [
|
|
110
|
+
/* @__PURE__ */ jsxs2(Link, { href: "/", className: styles2.navLogo, "aria-label": "Go to homepage", children: [
|
|
117
111
|
/* @__PURE__ */ jsxs2(
|
|
118
112
|
"svg",
|
|
119
113
|
{
|
|
@@ -159,37 +153,37 @@ function Header({ settings }) {
|
|
|
159
153
|
),
|
|
160
154
|
/* @__PURE__ */ jsxs2("span", { children: [
|
|
161
155
|
settings.labName || "Research",
|
|
162
|
-
settings.labNameAccent && /* @__PURE__ */ jsxs2("span", { className:
|
|
156
|
+
settings.labNameAccent && /* @__PURE__ */ jsxs2("span", { className: styles2.navLogoAccent, children: [
|
|
163
157
|
" ",
|
|
164
158
|
settings.labNameAccent
|
|
165
159
|
] })
|
|
166
160
|
] })
|
|
167
161
|
] }),
|
|
168
|
-
/* @__PURE__ */ jsx2("nav", { className:
|
|
162
|
+
/* @__PURE__ */ jsx2("nav", { className: styles2.desktopNav, "aria-label": "Main navigation", children: navLinks.map((link) => /* @__PURE__ */ jsx2(
|
|
169
163
|
Link,
|
|
170
164
|
{
|
|
171
165
|
href: link.href,
|
|
172
|
-
className: `${
|
|
166
|
+
className: `${styles2.navLink} ${isActive(link.href) ? styles2.navLinkActive : ""}`,
|
|
173
167
|
children: link.label
|
|
174
168
|
},
|
|
175
169
|
link.href
|
|
176
170
|
)) }),
|
|
177
|
-
/* @__PURE__ */ jsxs2("div", { className:
|
|
171
|
+
/* @__PURE__ */ jsxs2("div", { className: styles2.navActions, children: [
|
|
178
172
|
/* @__PURE__ */ jsx2(ThemeToggle, {}),
|
|
179
|
-
/* @__PURE__ */ jsx2(Link, { href: "/contact", className:
|
|
173
|
+
/* @__PURE__ */ jsx2(Link, { href: "/contact", className: styles2.navCta, children: "Contact Us" })
|
|
180
174
|
] }),
|
|
181
175
|
/* @__PURE__ */ jsx2(
|
|
182
176
|
"button",
|
|
183
177
|
{
|
|
184
|
-
className:
|
|
178
|
+
className: styles2.menuButton,
|
|
185
179
|
onClick: () => setMenuOpen(!menuOpen),
|
|
186
180
|
"aria-label": menuOpen ? "Close menu" : "Open menu",
|
|
187
181
|
"aria-expanded": menuOpen,
|
|
188
182
|
"aria-controls": "mobile-menu",
|
|
189
|
-
children: /* @__PURE__ */ jsxs2("span", { className:
|
|
190
|
-
/* @__PURE__ */ jsx2("span", { className: `${
|
|
191
|
-
/* @__PURE__ */ jsx2("span", { className: `${
|
|
192
|
-
/* @__PURE__ */ jsx2("span", { className: `${
|
|
183
|
+
children: /* @__PURE__ */ jsxs2("span", { className: styles2.menuButtonLines, children: [
|
|
184
|
+
/* @__PURE__ */ jsx2("span", { className: `${styles2.menuLine} ${menuOpen ? styles2.menuLineOpen1 : ""}` }),
|
|
185
|
+
/* @__PURE__ */ jsx2("span", { className: `${styles2.menuLine} ${menuOpen ? styles2.menuLineOpen2 : ""}` }),
|
|
186
|
+
/* @__PURE__ */ jsx2("span", { className: `${styles2.menuLine} ${menuOpen ? styles2.menuLineOpen3 : ""}` })
|
|
193
187
|
] })
|
|
194
188
|
}
|
|
195
189
|
),
|
|
@@ -197,13 +191,13 @@ function Header({ settings }) {
|
|
|
197
191
|
"div",
|
|
198
192
|
{
|
|
199
193
|
id: "mobile-menu",
|
|
200
|
-
className: `${
|
|
194
|
+
className: `${styles2.mobileMenu} ${menuOpen ? styles2.mobileMenuOpen : ""}`,
|
|
201
195
|
"aria-hidden": !menuOpen,
|
|
202
196
|
children: [
|
|
203
197
|
/* @__PURE__ */ jsx2(
|
|
204
198
|
"div",
|
|
205
199
|
{
|
|
206
|
-
className:
|
|
200
|
+
className: styles2.mobileMenuOverlay,
|
|
207
201
|
onClick: () => setMenuOpen(false),
|
|
208
202
|
"aria-hidden": "true"
|
|
209
203
|
}
|
|
@@ -211,14 +205,14 @@ function Header({ settings }) {
|
|
|
211
205
|
/* @__PURE__ */ jsxs2(
|
|
212
206
|
"nav",
|
|
213
207
|
{
|
|
214
|
-
className:
|
|
208
|
+
className: styles2.mobileMenuContent,
|
|
215
209
|
"aria-label": "Mobile navigation",
|
|
216
210
|
children: [
|
|
217
211
|
navLinks.map((link, index) => /* @__PURE__ */ jsx2(
|
|
218
212
|
Link,
|
|
219
213
|
{
|
|
220
214
|
href: link.href,
|
|
221
|
-
className: `${
|
|
215
|
+
className: `${styles2.mobileNavLink} ${isActive(link.href) ? styles2.mobileNavLinkActive : ""}`,
|
|
222
216
|
style: { animationDelay: `${index * 50}ms` },
|
|
223
217
|
tabIndex: menuOpen ? 0 : -1,
|
|
224
218
|
children: link.label
|
|
@@ -229,7 +223,7 @@ function Header({ settings }) {
|
|
|
229
223
|
Link,
|
|
230
224
|
{
|
|
231
225
|
href: "/contact",
|
|
232
|
-
className:
|
|
226
|
+
className: styles2.mobileNavCta,
|
|
233
227
|
style: { animationDelay: `${navLinks.length * 50}ms` },
|
|
234
228
|
tabIndex: menuOpen ? 0 : -1,
|
|
235
229
|
children: "Contact Us"
|
|
@@ -246,9 +240,7 @@ function Header({ settings }) {
|
|
|
246
240
|
|
|
247
241
|
// src/components/Footer.tsx
|
|
248
242
|
import Link2 from "next/link";
|
|
249
|
-
|
|
250
|
-
// src/components/Footer.module.css
|
|
251
|
-
var Footer_default = {};
|
|
243
|
+
import styles3 from "./Footer.module.css";
|
|
252
244
|
|
|
253
245
|
// src/lib/utils.ts
|
|
254
246
|
function isValidExternalUrl(url) {
|
|
@@ -303,49 +295,49 @@ function isValidSlug(slug) {
|
|
|
303
295
|
|
|
304
296
|
// src/components/Footer.tsx
|
|
305
297
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
306
|
-
var SocialIcon = ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, target: "_blank", rel: "noopener noreferrer", className:
|
|
298
|
+
var SocialIcon = ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, target: "_blank", rel: "noopener noreferrer", className: styles3.socialIcon, children });
|
|
307
299
|
function Footer({ settings }) {
|
|
308
300
|
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
309
301
|
const showPrivacy = settings?.showPrivacyPolicy !== false;
|
|
310
302
|
const showTerms = settings?.showTerms !== false;
|
|
311
303
|
const hasLegalLinks = showPrivacy || showTerms;
|
|
312
|
-
return /* @__PURE__ */ jsx3("footer", { className:
|
|
313
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
314
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
315
|
-
/* @__PURE__ */ jsxs3(Link2, { href: "/", className:
|
|
304
|
+
return /* @__PURE__ */ jsx3("footer", { className: styles3.footerWrapper, children: /* @__PURE__ */ jsxs3("div", { className: styles3.footerContainer, children: [
|
|
305
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.mainFooter, children: [
|
|
306
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerAbout, children: [
|
|
307
|
+
/* @__PURE__ */ jsxs3(Link2, { href: "/", className: styles3.footerLogo, children: [
|
|
316
308
|
settings?.labName || "Cavendish",
|
|
317
309
|
" ",
|
|
318
|
-
/* @__PURE__ */ jsx3("span", { className:
|
|
310
|
+
/* @__PURE__ */ jsx3("span", { className: styles3.logoAccent, children: settings?.labNameAccent || "Lab" })
|
|
319
311
|
] }),
|
|
320
|
-
/* @__PURE__ */ jsx3("p", { className:
|
|
321
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
312
|
+
/* @__PURE__ */ jsx3("p", { className: styles3.footerDescription, children: settings?.labNameDescription || "Advancing the frontiers of physics and our understanding of the universe." }),
|
|
313
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.socials, children: [
|
|
322
314
|
/* @__PURE__ */ jsx3(SocialIcon, { href: "#", children: /* @__PURE__ */ jsx3("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx3("path", { d: "M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z" }) }) }),
|
|
323
315
|
/* @__PURE__ */ jsx3(SocialIcon, { href: "#", children: /* @__PURE__ */ jsx3("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx3("path", { d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.617l-5.21-6.817-6.044 6.817h-3.308l7.73-8.835-7.73-10.668h6.78l4.522 6.312 5.59-6.312z" }) }) })
|
|
324
316
|
] })
|
|
325
317
|
] }),
|
|
326
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
327
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
318
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerLinksGrid, children: [
|
|
319
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerColumn, children: [
|
|
328
320
|
/* @__PURE__ */ jsx3("h4", { children: "Quick Links" }),
|
|
329
321
|
/* @__PURE__ */ jsx3(Link2, { href: "/research", children: "Research" }),
|
|
330
322
|
/* @__PURE__ */ jsx3(Link2, { href: "/publications", children: "Publications" }),
|
|
331
323
|
/* @__PURE__ */ jsx3(Link2, { href: "/pictures", children: "Gallery" })
|
|
332
324
|
] }),
|
|
333
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
325
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerColumn, children: [
|
|
334
326
|
/* @__PURE__ */ jsx3("h4", { children: "About" }),
|
|
335
327
|
/* @__PURE__ */ jsx3(Link2, { href: "/news", children: "News" }),
|
|
336
328
|
/* @__PURE__ */ jsx3(Link2, { href: "/people", children: "Our Team" }),
|
|
337
329
|
/* @__PURE__ */ jsx3(Link2, { href: "/contact", children: "Contact" })
|
|
338
330
|
] }),
|
|
339
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
331
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerColumn, children: [
|
|
340
332
|
/* @__PURE__ */ jsx3("h4", { children: "Resources" }),
|
|
341
333
|
/* @__PURE__ */ jsx3(Link2, { href: "https://www.cam.ac.uk/", children: "University" }),
|
|
342
334
|
/* @__PURE__ */ jsx3(Link2, { href: "#", children: "Careers" })
|
|
343
335
|
] })
|
|
344
336
|
] })
|
|
345
337
|
] }),
|
|
346
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
338
|
+
/* @__PURE__ */ jsxs3("div", { className: styles3.footerBottomBar, children: [
|
|
347
339
|
/* @__PURE__ */ jsx3("p", { children: settings?.footerText || `\xA9 ${currentYear} The Research Group. All Rights Reserved.` }),
|
|
348
|
-
hasLegalLinks && /* @__PURE__ */ jsxs3("div", { className:
|
|
340
|
+
hasLegalLinks && /* @__PURE__ */ jsxs3("div", { className: styles3.legalLinks, children: [
|
|
349
341
|
showPrivacy && (settings?.privacyPolicyUrl && isValidExternalUrl(settings.privacyPolicyUrl) ? /* @__PURE__ */ jsx3("a", { href: settings.privacyPolicyUrl, target: "_blank", rel: "noopener noreferrer", children: "Privacy Policy" }) : /* @__PURE__ */ jsx3(Link2, { href: "/privacy", children: "Privacy Policy" })),
|
|
350
342
|
showTerms && (settings?.termsUrl && isValidExternalUrl(settings.termsUrl) ? /* @__PURE__ */ jsx3("a", { href: settings.termsUrl, target: "_blank", rel: "noopener noreferrer", children: "Terms & Conditions" }) : /* @__PURE__ */ jsx3(Link2, { href: "/terms", children: "Terms & Conditions" }))
|
|
351
343
|
] })
|
|
@@ -381,17 +373,13 @@ function ClientLayout({ children, settings }) {
|
|
|
381
373
|
|
|
382
374
|
// src/components/ContactCTA.tsx
|
|
383
375
|
import Link3 from "next/link";
|
|
384
|
-
|
|
385
|
-
// src/components/ContactCTA.module.css
|
|
386
|
-
var ContactCTA_default = {};
|
|
387
|
-
|
|
388
|
-
// src/components/ContactCTA.tsx
|
|
376
|
+
import styles4 from "./ContactCTA.module.css";
|
|
389
377
|
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
390
378
|
function ContactCTA() {
|
|
391
|
-
return /* @__PURE__ */ jsx5("section", { className:
|
|
392
|
-
/* @__PURE__ */ jsx5("h2", { className:
|
|
393
|
-
/* @__PURE__ */ jsx5("p", { className:
|
|
394
|
-
/* @__PURE__ */ jsx5(Link3, { href: "/contact", className:
|
|
379
|
+
return /* @__PURE__ */ jsx5("section", { className: styles4.ctaContainer, children: /* @__PURE__ */ jsxs5("div", { className: styles4.ctaContent, children: [
|
|
380
|
+
/* @__PURE__ */ jsx5("h2", { className: styles4.ctaHeading, children: "Interested in Our Research?" }),
|
|
381
|
+
/* @__PURE__ */ jsx5("p", { className: styles4.ctaText, children: "Follow our work, explore our publications, or get in touch to discuss potential collaborations." }),
|
|
382
|
+
/* @__PURE__ */ jsx5(Link3, { href: "/contact", className: styles4.ctaButton, children: "Contact Us" })
|
|
395
383
|
] }) });
|
|
396
384
|
}
|
|
397
385
|
|
|
@@ -400,9 +388,7 @@ import { motion as motion2, useScroll, useTransform } from "framer-motion";
|
|
|
400
388
|
import { useRef } from "react";
|
|
401
389
|
import Image from "next/image";
|
|
402
390
|
import Link4 from "next/link";
|
|
403
|
-
|
|
404
|
-
// src/components/HomePage.module.css
|
|
405
|
-
var HomePage_default = {};
|
|
391
|
+
import styles5 from "./HomePage.module.css";
|
|
406
392
|
|
|
407
393
|
// src/lib/animations.ts
|
|
408
394
|
var fadeIn = {
|
|
@@ -560,11 +546,11 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
560
546
|
const ref = useRef(null);
|
|
561
547
|
const { scrollY } = useScroll();
|
|
562
548
|
const y = useTransform(scrollY, [0, 500], [0, 150]);
|
|
563
|
-
return /* @__PURE__ */ jsx6("section", { className:
|
|
549
|
+
return /* @__PURE__ */ jsx6("section", { className: styles5.heroSection, ref, children: /* @__PURE__ */ jsxs6("div", { className: styles5.heroContainer, children: [
|
|
564
550
|
/* @__PURE__ */ jsxs6(
|
|
565
551
|
motion2.div,
|
|
566
552
|
{
|
|
567
|
-
className:
|
|
553
|
+
className: styles5.heroContent,
|
|
568
554
|
initial: "hidden",
|
|
569
555
|
animate: "visible",
|
|
570
556
|
variants: fadeInUp,
|
|
@@ -572,7 +558,7 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
572
558
|
/* @__PURE__ */ jsx6(
|
|
573
559
|
motion2.span,
|
|
574
560
|
{
|
|
575
|
-
className:
|
|
561
|
+
className: styles5.heroTagline,
|
|
576
562
|
initial: { opacity: 0 },
|
|
577
563
|
animate: { opacity: 1 },
|
|
578
564
|
transition: { duration: 0.6, delay: 0.2 },
|
|
@@ -582,21 +568,21 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
582
568
|
/* @__PURE__ */ jsxs6(
|
|
583
569
|
motion2.h1,
|
|
584
570
|
{
|
|
585
|
-
className:
|
|
571
|
+
className: styles5.heroHeading,
|
|
586
572
|
initial: { opacity: 0, y: 20 },
|
|
587
573
|
animate: { opacity: 1, y: 0 },
|
|
588
574
|
transition: { duration: 0.8, delay: 0.3 },
|
|
589
575
|
children: [
|
|
590
576
|
heroData.heading,
|
|
591
577
|
" ",
|
|
592
|
-
/* @__PURE__ */ jsx6("span", { className:
|
|
578
|
+
/* @__PURE__ */ jsx6("span", { className: styles5.heroHeadingAccent, children: heroData.headingAccent })
|
|
593
579
|
]
|
|
594
580
|
}
|
|
595
581
|
),
|
|
596
582
|
/* @__PURE__ */ jsx6(
|
|
597
583
|
motion2.p,
|
|
598
584
|
{
|
|
599
|
-
className:
|
|
585
|
+
className: styles5.heroDescription,
|
|
600
586
|
initial: { opacity: 0, y: 20 },
|
|
601
587
|
animate: { opacity: 1, y: 0 },
|
|
602
588
|
transition: { duration: 0.8, delay: 0.4 },
|
|
@@ -606,16 +592,16 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
606
592
|
/* @__PURE__ */ jsxs6(
|
|
607
593
|
motion2.div,
|
|
608
594
|
{
|
|
609
|
-
className:
|
|
595
|
+
className: styles5.heroCtas,
|
|
610
596
|
initial: { opacity: 0, y: 20 },
|
|
611
597
|
animate: { opacity: 1, y: 0 },
|
|
612
598
|
transition: { duration: 0.8, delay: 0.5 },
|
|
613
599
|
children: [
|
|
614
|
-
/* @__PURE__ */ jsxs6(Link4, { href: heroData.ctaLink, className:
|
|
600
|
+
/* @__PURE__ */ jsxs6(Link4, { href: heroData.ctaLink, className: styles5.heroPrimaryCta, children: [
|
|
615
601
|
heroData.ctaText,
|
|
616
602
|
/* @__PURE__ */ jsx6(ArrowRightIcon, {})
|
|
617
603
|
] }),
|
|
618
|
-
/* @__PURE__ */ jsx6(Link4, { href: "/publications", className:
|
|
604
|
+
/* @__PURE__ */ jsx6(Link4, { href: "/publications", className: styles5.heroSecondaryCta, children: "View Publications" })
|
|
619
605
|
]
|
|
620
606
|
}
|
|
621
607
|
)
|
|
@@ -625,7 +611,7 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
625
611
|
/* @__PURE__ */ jsx6(
|
|
626
612
|
motion2.div,
|
|
627
613
|
{
|
|
628
|
-
className:
|
|
614
|
+
className: styles5.heroImageWrapper,
|
|
629
615
|
style: { y },
|
|
630
616
|
initial: "hidden",
|
|
631
617
|
animate: "visible",
|
|
@@ -639,12 +625,12 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
639
625
|
alt: "Research lab",
|
|
640
626
|
width: 800,
|
|
641
627
|
height: 600,
|
|
642
|
-
className:
|
|
628
|
+
className: styles5.heroImage,
|
|
643
629
|
priority: true
|
|
644
630
|
}
|
|
645
631
|
),
|
|
646
|
-
/* @__PURE__ */ jsx6("div", { className:
|
|
647
|
-
] }) : /* @__PURE__ */ jsx6("div", { className:
|
|
632
|
+
/* @__PURE__ */ jsx6("div", { className: styles5.heroImageOverlay })
|
|
633
|
+
] }) : /* @__PURE__ */ jsx6("div", { className: styles5.heroImagePlaceholder, children: /* @__PURE__ */ jsxs6(
|
|
648
634
|
"svg",
|
|
649
635
|
{
|
|
650
636
|
width: "120",
|
|
@@ -665,11 +651,26 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
665
651
|
] }) });
|
|
666
652
|
}
|
|
667
653
|
|
|
654
|
+
// src/components/HomePage.tsx
|
|
655
|
+
import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
656
|
+
function HomePage({
|
|
657
|
+
children,
|
|
658
|
+
settings = null,
|
|
659
|
+
header,
|
|
660
|
+
footer
|
|
661
|
+
}) {
|
|
662
|
+
return /* @__PURE__ */ jsxs7(Fragment2, { children: [
|
|
663
|
+
header ?? /* @__PURE__ */ jsx7(Header, { settings: settings || {} }),
|
|
664
|
+
/* @__PURE__ */ jsx7("main", { children }),
|
|
665
|
+
footer ?? /* @__PURE__ */ jsx7(Footer, { settings: settings || {} })
|
|
666
|
+
] });
|
|
667
|
+
}
|
|
668
|
+
|
|
668
669
|
// src/components/AnimatedCard.tsx
|
|
669
670
|
import { motion as motion3 } from "framer-motion";
|
|
670
|
-
import { jsx as
|
|
671
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
671
672
|
function AnimatedCard({ children, className, delay = 0 }) {
|
|
672
|
-
return /* @__PURE__ */
|
|
673
|
+
return /* @__PURE__ */ jsx8(
|
|
673
674
|
motion3.div,
|
|
674
675
|
{
|
|
675
676
|
className,
|
|
@@ -694,10 +695,10 @@ function AnimatedCard({ children, className, delay = 0 }) {
|
|
|
694
695
|
);
|
|
695
696
|
}
|
|
696
697
|
function AnimatedImage({ children, className }) {
|
|
697
|
-
return /* @__PURE__ */
|
|
698
|
+
return /* @__PURE__ */ jsx8(motion3.div, { className, variants: imageZoom, children });
|
|
698
699
|
}
|
|
699
700
|
function AnimatedSection({ children, className }) {
|
|
700
|
-
return /* @__PURE__ */
|
|
701
|
+
return /* @__PURE__ */ jsx8(
|
|
701
702
|
motion3.section,
|
|
702
703
|
{
|
|
703
704
|
className,
|
|
@@ -714,12 +715,8 @@ function AnimatedSection({ children, className }) {
|
|
|
714
715
|
import { motion as motion4 } from "framer-motion";
|
|
715
716
|
import Image2 from "next/image";
|
|
716
717
|
import { useState as useState3, useEffect as useEffect4 } from "react";
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
var PicturesPage_default = {};
|
|
720
|
-
|
|
721
|
-
// src/components/AnimatedGallery.tsx
|
|
722
|
-
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
718
|
+
import styles6 from "./PicturesPage.module.css";
|
|
719
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
723
720
|
function useMounted() {
|
|
724
721
|
const [mounted, setMounted] = useState3(false);
|
|
725
722
|
useEffect4(() => {
|
|
@@ -730,9 +727,9 @@ function useMounted() {
|
|
|
730
727
|
function AnimatedGalleryHeader({ children, className }) {
|
|
731
728
|
const mounted = useMounted();
|
|
732
729
|
if (!mounted) {
|
|
733
|
-
return /* @__PURE__ */
|
|
730
|
+
return /* @__PURE__ */ jsx9("header", { className, children });
|
|
734
731
|
}
|
|
735
|
-
return /* @__PURE__ */
|
|
732
|
+
return /* @__PURE__ */ jsx9(
|
|
736
733
|
motion4.header,
|
|
737
734
|
{
|
|
738
735
|
className,
|
|
@@ -746,8 +743,8 @@ function AnimatedGalleryHeader({ children, className }) {
|
|
|
746
743
|
function AnimatedGalleryGrid({ images }) {
|
|
747
744
|
const mounted = useMounted();
|
|
748
745
|
if (!mounted) {
|
|
749
|
-
return /* @__PURE__ */
|
|
750
|
-
/* @__PURE__ */
|
|
746
|
+
return /* @__PURE__ */ jsx9("div", { className: styles6.photosGrid, children: images.map((pic) => /* @__PURE__ */ jsxs8("div", { className: styles6.photoCard, children: [
|
|
747
|
+
/* @__PURE__ */ jsx9("div", { className: styles6.photoImageWrapper, children: /* @__PURE__ */ jsx9(
|
|
751
748
|
Image2,
|
|
752
749
|
{
|
|
753
750
|
src: pic.imageUrl,
|
|
@@ -755,16 +752,16 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
755
752
|
width: pic.width,
|
|
756
753
|
height: pic.height,
|
|
757
754
|
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
758
|
-
className:
|
|
755
|
+
className: styles6.photoImage
|
|
759
756
|
}
|
|
760
757
|
) }),
|
|
761
|
-
pic.caption && /* @__PURE__ */
|
|
758
|
+
pic.caption && /* @__PURE__ */ jsx9("p", { className: styles6.photoCaption, children: pic.caption })
|
|
762
759
|
] }, pic._id)) });
|
|
763
760
|
}
|
|
764
|
-
return /* @__PURE__ */
|
|
761
|
+
return /* @__PURE__ */ jsx9(
|
|
765
762
|
motion4.div,
|
|
766
763
|
{
|
|
767
|
-
className:
|
|
764
|
+
className: styles6.photosGrid,
|
|
768
765
|
initial: "hidden",
|
|
769
766
|
animate: "visible",
|
|
770
767
|
variants: {
|
|
@@ -777,10 +774,10 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
777
774
|
}
|
|
778
775
|
}
|
|
779
776
|
},
|
|
780
|
-
children: images.map((pic) => /* @__PURE__ */
|
|
777
|
+
children: images.map((pic) => /* @__PURE__ */ jsxs8(
|
|
781
778
|
motion4.div,
|
|
782
779
|
{
|
|
783
|
-
className:
|
|
780
|
+
className: styles6.photoCard,
|
|
784
781
|
variants: {
|
|
785
782
|
hidden: { opacity: 0, y: 40, scale: 0.95 },
|
|
786
783
|
visible: {
|
|
@@ -798,7 +795,7 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
798
795
|
transition: { duration: 0.3 }
|
|
799
796
|
},
|
|
800
797
|
children: [
|
|
801
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ jsx9("div", { className: styles6.photoImageWrapper, children: /* @__PURE__ */ jsx9(
|
|
802
799
|
Image2,
|
|
803
800
|
{
|
|
804
801
|
src: pic.imageUrl,
|
|
@@ -806,10 +803,10 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
806
803
|
width: pic.width,
|
|
807
804
|
height: pic.height,
|
|
808
805
|
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
809
|
-
className:
|
|
806
|
+
className: styles6.photoImage
|
|
810
807
|
}
|
|
811
808
|
) }),
|
|
812
|
-
pic.caption && /* @__PURE__ */
|
|
809
|
+
pic.caption && /* @__PURE__ */ jsx9("p", { className: styles6.photoCaption, children: pic.caption })
|
|
813
810
|
]
|
|
814
811
|
},
|
|
815
812
|
pic._id
|
|
@@ -821,7 +818,7 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
821
818
|
// src/components/AnimatedPage.tsx
|
|
822
819
|
import { motion as motion5 } from "framer-motion";
|
|
823
820
|
import { useState as useState4, useEffect as useEffect5 } from "react";
|
|
824
|
-
import { jsx as
|
|
821
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
825
822
|
function useMounted2() {
|
|
826
823
|
const [mounted, setMounted] = useState4(false);
|
|
827
824
|
useEffect5(() => {
|
|
@@ -832,9 +829,9 @@ function useMounted2() {
|
|
|
832
829
|
function AnimatedPage({ children, className }) {
|
|
833
830
|
const mounted = useMounted2();
|
|
834
831
|
if (!mounted) {
|
|
835
|
-
return /* @__PURE__ */
|
|
832
|
+
return /* @__PURE__ */ jsx10("div", { className, children });
|
|
836
833
|
}
|
|
837
|
-
return /* @__PURE__ */
|
|
834
|
+
return /* @__PURE__ */ jsx10(
|
|
838
835
|
motion5.div,
|
|
839
836
|
{
|
|
840
837
|
className,
|
|
@@ -848,9 +845,9 @@ function AnimatedPage({ children, className }) {
|
|
|
848
845
|
function AnimatedHeader({ children, className }) {
|
|
849
846
|
const mounted = useMounted2();
|
|
850
847
|
if (!mounted) {
|
|
851
|
-
return /* @__PURE__ */
|
|
848
|
+
return /* @__PURE__ */ jsx10("header", { className, children });
|
|
852
849
|
}
|
|
853
|
-
return /* @__PURE__ */
|
|
850
|
+
return /* @__PURE__ */ jsx10(
|
|
854
851
|
motion5.header,
|
|
855
852
|
{
|
|
856
853
|
className,
|
|
@@ -864,9 +861,9 @@ function AnimatedHeader({ children, className }) {
|
|
|
864
861
|
function AnimatedMain({ children, className }) {
|
|
865
862
|
const mounted = useMounted2();
|
|
866
863
|
if (!mounted) {
|
|
867
|
-
return /* @__PURE__ */
|
|
864
|
+
return /* @__PURE__ */ jsx10("main", { className, children });
|
|
868
865
|
}
|
|
869
|
-
return /* @__PURE__ */
|
|
866
|
+
return /* @__PURE__ */ jsx10(
|
|
870
867
|
motion5.main,
|
|
871
868
|
{
|
|
872
869
|
className,
|
|
@@ -881,9 +878,9 @@ function StaggeredGrid({ children, className }) {
|
|
|
881
878
|
const mounted = useMounted2();
|
|
882
879
|
const childArray = Array.isArray(children) ? children : [children];
|
|
883
880
|
if (!mounted) {
|
|
884
|
-
return /* @__PURE__ */
|
|
881
|
+
return /* @__PURE__ */ jsx10("div", { className, children });
|
|
885
882
|
}
|
|
886
|
-
return /* @__PURE__ */
|
|
883
|
+
return /* @__PURE__ */ jsx10(
|
|
887
884
|
motion5.div,
|
|
888
885
|
{
|
|
889
886
|
className,
|
|
@@ -900,7 +897,7 @@ function StaggeredGrid({ children, className }) {
|
|
|
900
897
|
}
|
|
901
898
|
}
|
|
902
899
|
},
|
|
903
|
-
children: childArray.map((child, index) => /* @__PURE__ */
|
|
900
|
+
children: childArray.map((child, index) => /* @__PURE__ */ jsx10(
|
|
904
901
|
motion5.div,
|
|
905
902
|
{
|
|
906
903
|
variants: {
|
|
@@ -924,9 +921,9 @@ function StaggeredGrid({ children, className }) {
|
|
|
924
921
|
function AnimatedItem({ children, className, delay = 0, index = 0 }) {
|
|
925
922
|
const mounted = useMounted2();
|
|
926
923
|
if (!mounted) {
|
|
927
|
-
return /* @__PURE__ */
|
|
924
|
+
return /* @__PURE__ */ jsx10("div", { className, children });
|
|
928
925
|
}
|
|
929
|
-
return /* @__PURE__ */
|
|
926
|
+
return /* @__PURE__ */ jsx10(
|
|
930
927
|
motion5.div,
|
|
931
928
|
{
|
|
932
929
|
className,
|
|
@@ -945,9 +942,9 @@ function AnimatedItem({ children, className, delay = 0, index = 0 }) {
|
|
|
945
942
|
function ScrollRevealSection({ children, className }) {
|
|
946
943
|
const mounted = useMounted2();
|
|
947
944
|
if (!mounted) {
|
|
948
|
-
return /* @__PURE__ */
|
|
945
|
+
return /* @__PURE__ */ jsx10("section", { className, children });
|
|
949
946
|
}
|
|
950
|
-
return /* @__PURE__ */
|
|
947
|
+
return /* @__PURE__ */ jsx10(
|
|
951
948
|
motion5.section,
|
|
952
949
|
{
|
|
953
950
|
className,
|
|
@@ -963,9 +960,9 @@ function AnimatedHeroContent({ children, className }) {
|
|
|
963
960
|
const mounted = useMounted2();
|
|
964
961
|
const childArray = Array.isArray(children) ? children : [children];
|
|
965
962
|
if (!mounted) {
|
|
966
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ jsx10("div", { className, children });
|
|
967
964
|
}
|
|
968
|
-
return /* @__PURE__ */
|
|
965
|
+
return /* @__PURE__ */ jsx10(
|
|
969
966
|
motion5.div,
|
|
970
967
|
{
|
|
971
968
|
className,
|
|
@@ -981,7 +978,7 @@ function AnimatedHeroContent({ children, className }) {
|
|
|
981
978
|
}
|
|
982
979
|
}
|
|
983
980
|
},
|
|
984
|
-
children: childArray.map((child, index) => /* @__PURE__ */
|
|
981
|
+
children: childArray.map((child, index) => /* @__PURE__ */ jsx10(
|
|
985
982
|
motion5.div,
|
|
986
983
|
{
|
|
987
984
|
variants: {
|
|
@@ -1005,10 +1002,10 @@ function AnimatedHeroContent({ children, className }) {
|
|
|
1005
1002
|
|
|
1006
1003
|
// src/components/AnimatedSections.tsx
|
|
1007
1004
|
import { motion as motion6 } from "framer-motion";
|
|
1008
|
-
import { jsx as
|
|
1005
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1009
1006
|
function AnimatedGrid({ children, className }) {
|
|
1010
1007
|
const childArray = Array.isArray(children) ? children : [children];
|
|
1011
|
-
return /* @__PURE__ */
|
|
1008
|
+
return /* @__PURE__ */ jsx11(
|
|
1012
1009
|
motion6.div,
|
|
1013
1010
|
{
|
|
1014
1011
|
className,
|
|
@@ -1016,13 +1013,13 @@ function AnimatedGrid({ children, className }) {
|
|
|
1016
1013
|
whileInView: "visible",
|
|
1017
1014
|
viewport: viewportSettings,
|
|
1018
1015
|
variants: staggerContainer,
|
|
1019
|
-
children: childArray.map((child, index) => /* @__PURE__ */
|
|
1016
|
+
children: childArray.map((child, index) => /* @__PURE__ */ jsx11(motion6.div, { variants: staggerItem, children: child }, index))
|
|
1020
1017
|
}
|
|
1021
1018
|
);
|
|
1022
1019
|
}
|
|
1023
1020
|
function AnimatedStats({ children, className }) {
|
|
1024
1021
|
const childArray = Array.isArray(children) ? children : [children];
|
|
1025
|
-
return /* @__PURE__ */
|
|
1022
|
+
return /* @__PURE__ */ jsx11(
|
|
1026
1023
|
motion6.div,
|
|
1027
1024
|
{
|
|
1028
1025
|
className,
|
|
@@ -1039,7 +1036,7 @@ function AnimatedStats({ children, className }) {
|
|
|
1039
1036
|
}
|
|
1040
1037
|
}
|
|
1041
1038
|
},
|
|
1042
|
-
children: childArray.map((child, index) => /* @__PURE__ */
|
|
1039
|
+
children: childArray.map((child, index) => /* @__PURE__ */ jsx11(
|
|
1043
1040
|
motion6.div,
|
|
1044
1041
|
{
|
|
1045
1042
|
variants: {
|
|
@@ -1061,7 +1058,7 @@ function AnimatedStats({ children, className }) {
|
|
|
1061
1058
|
);
|
|
1062
1059
|
}
|
|
1063
1060
|
function AnimatedSectionHeader({ children, className }) {
|
|
1064
|
-
return /* @__PURE__ */
|
|
1061
|
+
return /* @__PURE__ */ jsx11(
|
|
1065
1062
|
motion6.header,
|
|
1066
1063
|
{
|
|
1067
1064
|
className,
|
|
@@ -1075,7 +1072,7 @@ function AnimatedSectionHeader({ children, className }) {
|
|
|
1075
1072
|
}
|
|
1076
1073
|
function AnimatedList({ children, className }) {
|
|
1077
1074
|
const childArray = Array.isArray(children) ? children : [children];
|
|
1078
|
-
return /* @__PURE__ */
|
|
1075
|
+
return /* @__PURE__ */ jsx11(
|
|
1079
1076
|
motion6.div,
|
|
1080
1077
|
{
|
|
1081
1078
|
className,
|
|
@@ -1092,7 +1089,7 @@ function AnimatedList({ children, className }) {
|
|
|
1092
1089
|
}
|
|
1093
1090
|
}
|
|
1094
1091
|
},
|
|
1095
|
-
children: childArray.map((child, index) => /* @__PURE__ */
|
|
1092
|
+
children: childArray.map((child, index) => /* @__PURE__ */ jsx11(
|
|
1096
1093
|
motion6.div,
|
|
1097
1094
|
{
|
|
1098
1095
|
variants: {
|
|
@@ -1185,6 +1182,7 @@ export {
|
|
|
1185
1182
|
ContactCTA,
|
|
1186
1183
|
Footer,
|
|
1187
1184
|
Header,
|
|
1185
|
+
HomePage,
|
|
1188
1186
|
ScrollRevealSection,
|
|
1189
1187
|
StaggeredGrid,
|
|
1190
1188
|
ThemeToggle,
|