@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.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: ThemeToggle_default.togglePlaceholder });
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: ThemeToggle_default.toggle,
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: ThemeToggle_default.track, children: [
44
- /* @__PURE__ */ jsx("span", { className: `${ThemeToggle_default.icon} ${ThemeToggle_default.sunIcon} ${!isDark ? ThemeToggle_default.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: [
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: ThemeToggle_default.thumb,
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: `${ThemeToggle_default.icon} ${ThemeToggle_default.moonIcon} ${isDark ? ThemeToggle_default.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" }) }) })
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: `${Layout_default.header} ${scrolled ? Layout_default.headerScrolled : ""}`, children: /* @__PURE__ */ jsxs2("div", { className: Layout_default.navContainer, children: [
116
- /* @__PURE__ */ jsxs2(Link, { href: "/", className: Layout_default.navLogo, "aria-label": "Go to homepage", children: [
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: Layout_default.navLogoAccent, children: [
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: Layout_default.desktopNav, "aria-label": "Main navigation", children: navLinks.map((link) => /* @__PURE__ */ jsx2(
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: `${Layout_default.navLink} ${isActive(link.href) ? Layout_default.navLinkActive : ""}`,
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: Layout_default.navActions, children: [
171
+ /* @__PURE__ */ jsxs2("div", { className: styles2.navActions, children: [
178
172
  /* @__PURE__ */ jsx2(ThemeToggle, {}),
179
- /* @__PURE__ */ jsx2(Link, { href: "/contact", className: Layout_default.navCta, children: "Contact Us" })
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: Layout_default.menuButton,
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: Layout_default.menuButtonLines, children: [
190
- /* @__PURE__ */ jsx2("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen1 : ""}` }),
191
- /* @__PURE__ */ jsx2("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen2 : ""}` }),
192
- /* @__PURE__ */ jsx2("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen3 : ""}` })
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: `${Layout_default.mobileMenu} ${menuOpen ? Layout_default.mobileMenuOpen : ""}`,
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: Layout_default.mobileMenuOverlay,
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: Layout_default.mobileMenuContent,
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: `${Layout_default.mobileNavLink} ${isActive(link.href) ? Layout_default.mobileNavLinkActive : ""}`,
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: Layout_default.mobileNavCta,
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: Footer_default.socialIcon, children });
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: Footer_default.footerWrapper, children: /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerContainer, children: [
313
- /* @__PURE__ */ jsxs3("div", { className: Footer_default.mainFooter, children: [
314
- /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerAbout, children: [
315
- /* @__PURE__ */ jsxs3(Link2, { href: "/", className: Footer_default.footerLogo, children: [
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: Footer_default.logoAccent, children: settings?.labNameAccent || "Lab" })
310
+ /* @__PURE__ */ jsx3("span", { className: styles3.logoAccent, children: settings?.labNameAccent || "Lab" })
319
311
  ] }),
320
- /* @__PURE__ */ jsx3("p", { className: Footer_default.footerDescription, children: settings?.labNameDescription || "Advancing the frontiers of physics and our understanding of the universe." }),
321
- /* @__PURE__ */ jsxs3("div", { className: Footer_default.socials, children: [
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: Footer_default.footerLinksGrid, children: [
327
- /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerColumn, children: [
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: Footer_default.footerColumn, children: [
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: Footer_default.footerColumn, children: [
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: Footer_default.footerBottomBar, children: [
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: Footer_default.legalLinks, children: [
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: ContactCTA_default.ctaContainer, children: /* @__PURE__ */ jsxs5("div", { className: ContactCTA_default.ctaContent, children: [
392
- /* @__PURE__ */ jsx5("h2", { className: ContactCTA_default.ctaHeading, children: "Interested in Our Research?" }),
393
- /* @__PURE__ */ jsx5("p", { className: ContactCTA_default.ctaText, children: "Follow our work, explore our publications, or get in touch to discuss potential collaborations." }),
394
- /* @__PURE__ */ jsx5(Link3, { href: "/contact", className: ContactCTA_default.ctaButton, children: "Contact Us" })
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: HomePage_default.heroSection, ref, children: /* @__PURE__ */ jsxs6("div", { className: HomePage_default.heroContainer, children: [
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: HomePage_default.heroContent,
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: HomePage_default.heroTagline,
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: HomePage_default.heroHeading,
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: HomePage_default.heroHeadingAccent, children: heroData.headingAccent })
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: HomePage_default.heroDescription,
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: HomePage_default.heroCtas,
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: HomePage_default.heroPrimaryCta, children: [
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: HomePage_default.heroSecondaryCta, children: "View Publications" })
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: HomePage_default.heroImageWrapper,
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: HomePage_default.heroImage,
628
+ className: styles5.heroImage,
643
629
  priority: true
644
630
  }
645
631
  ),
646
- /* @__PURE__ */ jsx6("div", { className: HomePage_default.heroImageOverlay })
647
- ] }) : /* @__PURE__ */ jsx6("div", { className: HomePage_default.heroImagePlaceholder, children: /* @__PURE__ */ jsxs6(
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 jsx7 } from "react/jsx-runtime";
671
+ import { jsx as jsx8 } from "react/jsx-runtime";
671
672
  function AnimatedCard({ children, className, delay = 0 }) {
672
- return /* @__PURE__ */ jsx7(
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__ */ jsx7(motion3.div, { className, variants: imageZoom, children });
698
+ return /* @__PURE__ */ jsx8(motion3.div, { className, variants: imageZoom, children });
698
699
  }
699
700
  function AnimatedSection({ children, className }) {
700
- return /* @__PURE__ */ jsx7(
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
- // src/components/PicturesPage.module.css
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__ */ jsx8("header", { className, children });
730
+ return /* @__PURE__ */ jsx9("header", { className, children });
734
731
  }
735
- return /* @__PURE__ */ jsx8(
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__ */ jsx8("div", { className: PicturesPage_default.photosGrid, children: images.map((pic) => /* @__PURE__ */ jsxs7("div", { className: PicturesPage_default.photoCard, children: [
750
- /* @__PURE__ */ jsx8("div", { className: PicturesPage_default.photoImageWrapper, children: /* @__PURE__ */ jsx8(
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: PicturesPage_default.photoImage
755
+ className: styles6.photoImage
759
756
  }
760
757
  ) }),
761
- pic.caption && /* @__PURE__ */ jsx8("p", { className: PicturesPage_default.photoCaption, children: pic.caption })
758
+ pic.caption && /* @__PURE__ */ jsx9("p", { className: styles6.photoCaption, children: pic.caption })
762
759
  ] }, pic._id)) });
763
760
  }
764
- return /* @__PURE__ */ jsx8(
761
+ return /* @__PURE__ */ jsx9(
765
762
  motion4.div,
766
763
  {
767
- className: PicturesPage_default.photosGrid,
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__ */ jsxs7(
777
+ children: images.map((pic) => /* @__PURE__ */ jsxs8(
781
778
  motion4.div,
782
779
  {
783
- className: PicturesPage_default.photoCard,
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__ */ jsx8("div", { className: PicturesPage_default.photoImageWrapper, children: /* @__PURE__ */ jsx8(
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: PicturesPage_default.photoImage
806
+ className: styles6.photoImage
810
807
  }
811
808
  ) }),
812
- pic.caption && /* @__PURE__ */ jsx8("p", { className: PicturesPage_default.photoCaption, children: pic.caption })
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 jsx9 } from "react/jsx-runtime";
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__ */ jsx9("div", { className, children });
832
+ return /* @__PURE__ */ jsx10("div", { className, children });
836
833
  }
837
- return /* @__PURE__ */ jsx9(
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__ */ jsx9("header", { className, children });
848
+ return /* @__PURE__ */ jsx10("header", { className, children });
852
849
  }
853
- return /* @__PURE__ */ jsx9(
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__ */ jsx9("main", { className, children });
864
+ return /* @__PURE__ */ jsx10("main", { className, children });
868
865
  }
869
- return /* @__PURE__ */ jsx9(
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__ */ jsx9("div", { className, children });
881
+ return /* @__PURE__ */ jsx10("div", { className, children });
885
882
  }
886
- return /* @__PURE__ */ jsx9(
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__ */ jsx9(
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__ */ jsx9("div", { className, children });
924
+ return /* @__PURE__ */ jsx10("div", { className, children });
928
925
  }
929
- return /* @__PURE__ */ jsx9(
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__ */ jsx9("section", { className, children });
945
+ return /* @__PURE__ */ jsx10("section", { className, children });
949
946
  }
950
- return /* @__PURE__ */ jsx9(
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__ */ jsx9("div", { className, children });
963
+ return /* @__PURE__ */ jsx10("div", { className, children });
967
964
  }
968
- return /* @__PURE__ */ jsx9(
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__ */ jsx9(
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 jsx10 } from "react/jsx-runtime";
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__ */ jsx10(
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__ */ jsx10(motion6.div, { variants: staggerItem, children: child }, index))
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__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10(
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__ */ jsx10(
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,