@prosophia/lab-classic 0.0.4 → 0.1.0
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.js +69 -89
- package/dist/index.mjs +69 -89
- package/dist/layouts/index.js +40 -48
- package/dist/layouts/index.mjs +40 -48
- package/package.json +1 -1
- package/dist/index.css +0 -1587
- package/dist/layouts/index.css +0 -594
package/dist/index.js
CHANGED
|
@@ -281,11 +281,7 @@ function AnimatedSection({ children, className }) {
|
|
|
281
281
|
var import_framer_motion2 = require("framer-motion");
|
|
282
282
|
var import_image = __toESM(require("next/image"));
|
|
283
283
|
var import_react = require("react");
|
|
284
|
-
|
|
285
|
-
// src/components/PicturesPage.module.css
|
|
286
|
-
var PicturesPage_default = {};
|
|
287
|
-
|
|
288
|
-
// src/components/AnimatedGallery.tsx
|
|
284
|
+
var import_PicturesPage = __toESM(require("./PicturesPage.module.css"));
|
|
289
285
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
290
286
|
function useMounted() {
|
|
291
287
|
const [mounted, setMounted] = (0, import_react.useState)(false);
|
|
@@ -313,8 +309,8 @@ function AnimatedGalleryHeader({ children, className }) {
|
|
|
313
309
|
function AnimatedGalleryGrid({ images }) {
|
|
314
310
|
const mounted = useMounted();
|
|
315
311
|
if (!mounted) {
|
|
316
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className:
|
|
317
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className:
|
|
312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: import_PicturesPage.default.photosGrid, children: images.map((pic) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: import_PicturesPage.default.photoCard, children: [
|
|
313
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: import_PicturesPage.default.photoImageWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
318
314
|
import_image.default,
|
|
319
315
|
{
|
|
320
316
|
src: pic.imageUrl,
|
|
@@ -322,16 +318,16 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
322
318
|
width: pic.width,
|
|
323
319
|
height: pic.height,
|
|
324
320
|
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
325
|
-
className:
|
|
321
|
+
className: import_PicturesPage.default.photoImage
|
|
326
322
|
}
|
|
327
323
|
) }),
|
|
328
|
-
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className:
|
|
324
|
+
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: import_PicturesPage.default.photoCaption, children: pic.caption })
|
|
329
325
|
] }, pic._id)) });
|
|
330
326
|
}
|
|
331
327
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
332
328
|
import_framer_motion2.motion.div,
|
|
333
329
|
{
|
|
334
|
-
className:
|
|
330
|
+
className: import_PicturesPage.default.photosGrid,
|
|
335
331
|
initial: "hidden",
|
|
336
332
|
animate: "visible",
|
|
337
333
|
variants: {
|
|
@@ -347,7 +343,7 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
347
343
|
children: images.map((pic) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
348
344
|
import_framer_motion2.motion.div,
|
|
349
345
|
{
|
|
350
|
-
className:
|
|
346
|
+
className: import_PicturesPage.default.photoCard,
|
|
351
347
|
variants: {
|
|
352
348
|
hidden: { opacity: 0, y: 40, scale: 0.95 },
|
|
353
349
|
visible: {
|
|
@@ -365,7 +361,7 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
365
361
|
transition: { duration: 0.3 }
|
|
366
362
|
},
|
|
367
363
|
children: [
|
|
368
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className:
|
|
364
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: import_PicturesPage.default.photoImageWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
369
365
|
import_image.default,
|
|
370
366
|
{
|
|
371
367
|
src: pic.imageUrl,
|
|
@@ -373,10 +369,10 @@ function AnimatedGalleryGrid({ images }) {
|
|
|
373
369
|
width: pic.width,
|
|
374
370
|
height: pic.height,
|
|
375
371
|
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
376
|
-
className:
|
|
372
|
+
className: import_PicturesPage.default.photoImage
|
|
377
373
|
}
|
|
378
374
|
) }),
|
|
379
|
-
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className:
|
|
375
|
+
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: import_PicturesPage.default.photoCaption, children: pic.caption })
|
|
380
376
|
]
|
|
381
377
|
},
|
|
382
378
|
pic._id
|
|
@@ -686,21 +682,17 @@ var import_framer_motion5 = require("framer-motion");
|
|
|
686
682
|
var import_react3 = require("react");
|
|
687
683
|
var import_image2 = __toESM(require("next/image"));
|
|
688
684
|
var import_link = __toESM(require("next/link"));
|
|
689
|
-
|
|
690
|
-
// src/components/HomePage.module.css
|
|
691
|
-
var HomePage_default = {};
|
|
692
|
-
|
|
693
|
-
// src/components/AnimatedHero.tsx
|
|
685
|
+
var import_HomePage = __toESM(require("./HomePage.module.css"));
|
|
694
686
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
695
687
|
function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
696
688
|
const ref = (0, import_react3.useRef)(null);
|
|
697
689
|
const { scrollY } = (0, import_framer_motion5.useScroll)();
|
|
698
690
|
const y = (0, import_framer_motion5.useTransform)(scrollY, [0, 500], [0, 150]);
|
|
699
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className:
|
|
691
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: import_HomePage.default.heroSection, ref, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: import_HomePage.default.heroContainer, children: [
|
|
700
692
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
701
693
|
import_framer_motion5.motion.div,
|
|
702
694
|
{
|
|
703
|
-
className:
|
|
695
|
+
className: import_HomePage.default.heroContent,
|
|
704
696
|
initial: "hidden",
|
|
705
697
|
animate: "visible",
|
|
706
698
|
variants: fadeInUp,
|
|
@@ -708,7 +700,7 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
708
700
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
709
701
|
import_framer_motion5.motion.span,
|
|
710
702
|
{
|
|
711
|
-
className:
|
|
703
|
+
className: import_HomePage.default.heroTagline,
|
|
712
704
|
initial: { opacity: 0 },
|
|
713
705
|
animate: { opacity: 1 },
|
|
714
706
|
transition: { duration: 0.6, delay: 0.2 },
|
|
@@ -718,21 +710,21 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
718
710
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
719
711
|
import_framer_motion5.motion.h1,
|
|
720
712
|
{
|
|
721
|
-
className:
|
|
713
|
+
className: import_HomePage.default.heroHeading,
|
|
722
714
|
initial: { opacity: 0, y: 20 },
|
|
723
715
|
animate: { opacity: 1, y: 0 },
|
|
724
716
|
transition: { duration: 0.8, delay: 0.3 },
|
|
725
717
|
children: [
|
|
726
718
|
heroData.heading,
|
|
727
719
|
" ",
|
|
728
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className:
|
|
720
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: import_HomePage.default.heroHeadingAccent, children: heroData.headingAccent })
|
|
729
721
|
]
|
|
730
722
|
}
|
|
731
723
|
),
|
|
732
724
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
733
725
|
import_framer_motion5.motion.p,
|
|
734
726
|
{
|
|
735
|
-
className:
|
|
727
|
+
className: import_HomePage.default.heroDescription,
|
|
736
728
|
initial: { opacity: 0, y: 20 },
|
|
737
729
|
animate: { opacity: 1, y: 0 },
|
|
738
730
|
transition: { duration: 0.8, delay: 0.4 },
|
|
@@ -742,16 +734,16 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
742
734
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
743
735
|
import_framer_motion5.motion.div,
|
|
744
736
|
{
|
|
745
|
-
className:
|
|
737
|
+
className: import_HomePage.default.heroCtas,
|
|
746
738
|
initial: { opacity: 0, y: 20 },
|
|
747
739
|
animate: { opacity: 1, y: 0 },
|
|
748
740
|
transition: { duration: 0.8, delay: 0.5 },
|
|
749
741
|
children: [
|
|
750
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_link.default, { href: heroData.ctaLink, className:
|
|
742
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_link.default, { href: heroData.ctaLink, className: import_HomePage.default.heroPrimaryCta, children: [
|
|
751
743
|
heroData.ctaText,
|
|
752
744
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ArrowRightIcon, {})
|
|
753
745
|
] }),
|
|
754
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_link.default, { href: "/publications", className:
|
|
746
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_link.default, { href: "/publications", className: import_HomePage.default.heroSecondaryCta, children: "View Publications" })
|
|
755
747
|
]
|
|
756
748
|
}
|
|
757
749
|
)
|
|
@@ -761,7 +753,7 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
761
753
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
762
754
|
import_framer_motion5.motion.div,
|
|
763
755
|
{
|
|
764
|
-
className:
|
|
756
|
+
className: import_HomePage.default.heroImageWrapper,
|
|
765
757
|
style: { y },
|
|
766
758
|
initial: "hidden",
|
|
767
759
|
animate: "visible",
|
|
@@ -775,12 +767,12 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
775
767
|
alt: "Research lab",
|
|
776
768
|
width: 800,
|
|
777
769
|
height: 600,
|
|
778
|
-
className:
|
|
770
|
+
className: import_HomePage.default.heroImage,
|
|
779
771
|
priority: true
|
|
780
772
|
}
|
|
781
773
|
),
|
|
782
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className:
|
|
783
|
-
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className:
|
|
774
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: import_HomePage.default.heroImageOverlay })
|
|
775
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: import_HomePage.default.heroImagePlaceholder, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
784
776
|
"svg",
|
|
785
777
|
{
|
|
786
778
|
width: "120",
|
|
@@ -809,19 +801,13 @@ var import_next_themes2 = require("next-themes");
|
|
|
809
801
|
var import_link2 = __toESM(require("next/link"));
|
|
810
802
|
var import_react5 = require("react");
|
|
811
803
|
var import_navigation = require("next/navigation");
|
|
812
|
-
|
|
813
|
-
// src/components/Layout.module.css
|
|
814
|
-
var Layout_default = {};
|
|
804
|
+
var import_Layout = __toESM(require("./Layout.module.css"));
|
|
815
805
|
|
|
816
806
|
// src/components/ThemeToggle.tsx
|
|
817
807
|
var import_next_themes = require("next-themes");
|
|
818
808
|
var import_react4 = require("react");
|
|
819
809
|
var import_framer_motion6 = require("framer-motion");
|
|
820
|
-
|
|
821
|
-
// src/components/ThemeToggle.module.css
|
|
822
|
-
var ThemeToggle_default = {};
|
|
823
|
-
|
|
824
|
-
// src/components/ThemeToggle.tsx
|
|
810
|
+
var import_ThemeToggle = __toESM(require("./ThemeToggle.module.css"));
|
|
825
811
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
826
812
|
function ThemeToggle() {
|
|
827
813
|
const { theme, setTheme, resolvedTheme } = (0, import_next_themes.useTheme)();
|
|
@@ -830,7 +816,7 @@ function ThemeToggle() {
|
|
|
830
816
|
setMounted(true);
|
|
831
817
|
}, []);
|
|
832
818
|
if (!mounted) {
|
|
833
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className:
|
|
819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: import_ThemeToggle.default.togglePlaceholder });
|
|
834
820
|
}
|
|
835
821
|
const isDark = resolvedTheme === "dark";
|
|
836
822
|
const toggleTheme = () => {
|
|
@@ -839,12 +825,12 @@ function ThemeToggle() {
|
|
|
839
825
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
840
826
|
import_framer_motion6.motion.button,
|
|
841
827
|
{
|
|
842
|
-
className:
|
|
828
|
+
className: import_ThemeToggle.default.toggle,
|
|
843
829
|
onClick: toggleTheme,
|
|
844
830
|
"aria-label": `Switch to ${isDark ? "light" : "dark"} mode`,
|
|
845
831
|
whileTap: { scale: 0.95 },
|
|
846
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className:
|
|
847
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: `${
|
|
832
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: import_ThemeToggle.default.track, children: [
|
|
833
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: `${import_ThemeToggle.default.icon} ${import_ThemeToggle.default.sunIcon} ${!isDark ? import_ThemeToggle.default.iconActive : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
848
834
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("circle", { cx: "12", cy: "12", r: "5" }),
|
|
849
835
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
|
|
850
836
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
|
|
@@ -858,12 +844,12 @@ function ThemeToggle() {
|
|
|
858
844
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
859
845
|
import_framer_motion6.motion.span,
|
|
860
846
|
{
|
|
861
|
-
className:
|
|
847
|
+
className: import_ThemeToggle.default.thumb,
|
|
862
848
|
animate: { x: isDark ? 26 : 0 },
|
|
863
849
|
transition: { type: "spring", stiffness: 500, damping: 30 }
|
|
864
850
|
}
|
|
865
851
|
),
|
|
866
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: `${
|
|
852
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: `${import_ThemeToggle.default.icon} ${import_ThemeToggle.default.moonIcon} ${isDark ? import_ThemeToggle.default.iconActive : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }) })
|
|
867
853
|
] })
|
|
868
854
|
}
|
|
869
855
|
);
|
|
@@ -915,8 +901,8 @@ function Header({ settings }) {
|
|
|
915
901
|
if (href === "/") return pathname === "/";
|
|
916
902
|
return pathname.startsWith(href);
|
|
917
903
|
};
|
|
918
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("header", { className: `${
|
|
919
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_link2.default, { href: "/", className:
|
|
904
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("header", { className: `${import_Layout.default.header} ${scrolled ? import_Layout.default.headerScrolled : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: import_Layout.default.navContainer, children: [
|
|
905
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_link2.default, { href: "/", className: import_Layout.default.navLogo, "aria-label": "Go to homepage", children: [
|
|
920
906
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
921
907
|
"svg",
|
|
922
908
|
{
|
|
@@ -962,37 +948,37 @@ function Header({ settings }) {
|
|
|
962
948
|
),
|
|
963
949
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { children: [
|
|
964
950
|
settings.labName || "Research",
|
|
965
|
-
settings.labNameAccent && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className:
|
|
951
|
+
settings.labNameAccent && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: import_Layout.default.navLogoAccent, children: [
|
|
966
952
|
" ",
|
|
967
953
|
settings.labNameAccent
|
|
968
954
|
] })
|
|
969
955
|
] })
|
|
970
956
|
] }),
|
|
971
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("nav", { className:
|
|
957
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("nav", { className: import_Layout.default.desktopNav, "aria-label": "Main navigation", children: navLinks.map((link) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
972
958
|
import_link2.default,
|
|
973
959
|
{
|
|
974
960
|
href: link.href,
|
|
975
|
-
className: `${
|
|
961
|
+
className: `${import_Layout.default.navLink} ${isActive(link.href) ? import_Layout.default.navLinkActive : ""}`,
|
|
976
962
|
children: link.label
|
|
977
963
|
},
|
|
978
964
|
link.href
|
|
979
965
|
)) }),
|
|
980
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className:
|
|
966
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: import_Layout.default.navActions, children: [
|
|
981
967
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ThemeToggle, {}),
|
|
982
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_link2.default, { href: "/contact", className:
|
|
968
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_link2.default, { href: "/contact", className: import_Layout.default.navCta, children: "Contact Us" })
|
|
983
969
|
] }),
|
|
984
970
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
985
971
|
"button",
|
|
986
972
|
{
|
|
987
|
-
className:
|
|
973
|
+
className: import_Layout.default.menuButton,
|
|
988
974
|
onClick: () => setMenuOpen(!menuOpen),
|
|
989
975
|
"aria-label": menuOpen ? "Close menu" : "Open menu",
|
|
990
976
|
"aria-expanded": menuOpen,
|
|
991
977
|
"aria-controls": "mobile-menu",
|
|
992
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className:
|
|
993
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${
|
|
994
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${
|
|
995
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${
|
|
978
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: import_Layout.default.menuButtonLines, children: [
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${import_Layout.default.menuLine} ${menuOpen ? import_Layout.default.menuLineOpen1 : ""}` }),
|
|
980
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${import_Layout.default.menuLine} ${menuOpen ? import_Layout.default.menuLineOpen2 : ""}` }),
|
|
981
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: `${import_Layout.default.menuLine} ${menuOpen ? import_Layout.default.menuLineOpen3 : ""}` })
|
|
996
982
|
] })
|
|
997
983
|
}
|
|
998
984
|
),
|
|
@@ -1000,13 +986,13 @@ function Header({ settings }) {
|
|
|
1000
986
|
"div",
|
|
1001
987
|
{
|
|
1002
988
|
id: "mobile-menu",
|
|
1003
|
-
className: `${
|
|
989
|
+
className: `${import_Layout.default.mobileMenu} ${menuOpen ? import_Layout.default.mobileMenuOpen : ""}`,
|
|
1004
990
|
"aria-hidden": !menuOpen,
|
|
1005
991
|
children: [
|
|
1006
992
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1007
993
|
"div",
|
|
1008
994
|
{
|
|
1009
|
-
className:
|
|
995
|
+
className: import_Layout.default.mobileMenuOverlay,
|
|
1010
996
|
onClick: () => setMenuOpen(false),
|
|
1011
997
|
"aria-hidden": "true"
|
|
1012
998
|
}
|
|
@@ -1014,14 +1000,14 @@ function Header({ settings }) {
|
|
|
1014
1000
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
1015
1001
|
"nav",
|
|
1016
1002
|
{
|
|
1017
|
-
className:
|
|
1003
|
+
className: import_Layout.default.mobileMenuContent,
|
|
1018
1004
|
"aria-label": "Mobile navigation",
|
|
1019
1005
|
children: [
|
|
1020
1006
|
navLinks.map((link, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1021
1007
|
import_link2.default,
|
|
1022
1008
|
{
|
|
1023
1009
|
href: link.href,
|
|
1024
|
-
className: `${
|
|
1010
|
+
className: `${import_Layout.default.mobileNavLink} ${isActive(link.href) ? import_Layout.default.mobileNavLinkActive : ""}`,
|
|
1025
1011
|
style: { animationDelay: `${index * 50}ms` },
|
|
1026
1012
|
tabIndex: menuOpen ? 0 : -1,
|
|
1027
1013
|
children: link.label
|
|
@@ -1032,7 +1018,7 @@ function Header({ settings }) {
|
|
|
1032
1018
|
import_link2.default,
|
|
1033
1019
|
{
|
|
1034
1020
|
href: "/contact",
|
|
1035
|
-
className:
|
|
1021
|
+
className: import_Layout.default.mobileNavCta,
|
|
1036
1022
|
style: { animationDelay: `${navLinks.length * 50}ms` },
|
|
1037
1023
|
tabIndex: menuOpen ? 0 : -1,
|
|
1038
1024
|
children: "Contact Us"
|
|
@@ -1049,9 +1035,7 @@ function Header({ settings }) {
|
|
|
1049
1035
|
|
|
1050
1036
|
// src/components/Footer.tsx
|
|
1051
1037
|
var import_link3 = __toESM(require("next/link"));
|
|
1052
|
-
|
|
1053
|
-
// src/components/Footer.module.css
|
|
1054
|
-
var Footer_default = {};
|
|
1038
|
+
var import_Footer = __toESM(require("./Footer.module.css"));
|
|
1055
1039
|
|
|
1056
1040
|
// src/lib/utils.ts
|
|
1057
1041
|
function isValidExternalUrl(url) {
|
|
@@ -1106,49 +1090,49 @@ function isValidSlug(slug) {
|
|
|
1106
1090
|
|
|
1107
1091
|
// src/components/Footer.tsx
|
|
1108
1092
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1109
|
-
var SocialIcon = ({ href, children }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href, target: "_blank", rel: "noopener noreferrer", className:
|
|
1093
|
+
var SocialIcon = ({ href, children }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href, target: "_blank", rel: "noopener noreferrer", className: import_Footer.default.socialIcon, children });
|
|
1110
1094
|
function Footer({ settings }) {
|
|
1111
1095
|
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
1112
1096
|
const showPrivacy = settings?.showPrivacyPolicy !== false;
|
|
1113
1097
|
const showTerms = settings?.showTerms !== false;
|
|
1114
1098
|
const hasLegalLinks = showPrivacy || showTerms;
|
|
1115
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("footer", { className:
|
|
1116
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1117
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1118
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_link3.default, { href: "/", className:
|
|
1099
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("footer", { className: import_Footer.default.footerWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerContainer, children: [
|
|
1100
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.mainFooter, children: [
|
|
1101
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerAbout, children: [
|
|
1102
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_link3.default, { href: "/", className: import_Footer.default.footerLogo, children: [
|
|
1119
1103
|
settings?.labName || "Cavendish",
|
|
1120
1104
|
" ",
|
|
1121
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className:
|
|
1105
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: import_Footer.default.logoAccent, children: settings?.labNameAccent || "Lab" })
|
|
1122
1106
|
] }),
|
|
1123
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className:
|
|
1124
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1107
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: import_Footer.default.footerDescription, children: settings?.labNameDescription || "Advancing the frontiers of physics and our understanding of the universe." }),
|
|
1108
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.socials, children: [
|
|
1125
1109
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SocialIcon, { href: "#", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("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" }) }) }),
|
|
1126
1110
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SocialIcon, { href: "#", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("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" }) }) })
|
|
1127
1111
|
] })
|
|
1128
1112
|
] }),
|
|
1129
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1130
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerLinksGrid, children: [
|
|
1114
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerColumn, children: [
|
|
1131
1115
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h4", { children: "Quick Links" }),
|
|
1132
1116
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/research", children: "Research" }),
|
|
1133
1117
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/publications", children: "Publications" }),
|
|
1134
1118
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/pictures", children: "Gallery" })
|
|
1135
1119
|
] }),
|
|
1136
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerColumn, children: [
|
|
1137
1121
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h4", { children: "About" }),
|
|
1138
1122
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/news", children: "News" }),
|
|
1139
1123
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/people", children: "Our Team" }),
|
|
1140
1124
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/contact", children: "Contact" })
|
|
1141
1125
|
] }),
|
|
1142
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1126
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerColumn, children: [
|
|
1143
1127
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h4", { children: "Resources" }),
|
|
1144
1128
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "https://www.cam.ac.uk/", children: "University" }),
|
|
1145
1129
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "#", children: "Careers" })
|
|
1146
1130
|
] })
|
|
1147
1131
|
] })
|
|
1148
1132
|
] }),
|
|
1149
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.footerBottomBar, children: [
|
|
1150
1134
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { children: settings?.footerText || `\xA9 ${currentYear} The Research Group. All Rights Reserved.` }),
|
|
1151
|
-
hasLegalLinks && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className:
|
|
1135
|
+
hasLegalLinks && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Footer.default.legalLinks, children: [
|
|
1152
1136
|
showPrivacy && (settings?.privacyPolicyUrl && isValidExternalUrl(settings.privacyPolicyUrl) ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href: settings.privacyPolicyUrl, target: "_blank", rel: "noopener noreferrer", children: "Privacy Policy" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/privacy", children: "Privacy Policy" })),
|
|
1153
1137
|
showTerms && (settings?.termsUrl && isValidExternalUrl(settings.termsUrl) ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href: settings.termsUrl, target: "_blank", rel: "noopener noreferrer", children: "Terms & Conditions" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_link3.default, { href: "/terms", children: "Terms & Conditions" }))
|
|
1154
1138
|
] })
|
|
@@ -1184,17 +1168,13 @@ function ClientLayout({ children, settings }) {
|
|
|
1184
1168
|
|
|
1185
1169
|
// src/components/ContactCTA.tsx
|
|
1186
1170
|
var import_link4 = __toESM(require("next/link"));
|
|
1187
|
-
|
|
1188
|
-
// src/components/ContactCTA.module.css
|
|
1189
|
-
var ContactCTA_default = {};
|
|
1190
|
-
|
|
1191
|
-
// src/components/ContactCTA.tsx
|
|
1171
|
+
var import_ContactCTA = __toESM(require("./ContactCTA.module.css"));
|
|
1192
1172
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1193
1173
|
function ContactCTA() {
|
|
1194
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("section", { className:
|
|
1195
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className:
|
|
1196
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className:
|
|
1197
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_link4.default, { href: "/contact", className:
|
|
1174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("section", { className: import_ContactCTA.default.ctaContainer, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: import_ContactCTA.default.ctaContent, children: [
|
|
1175
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className: import_ContactCTA.default.ctaHeading, children: "Interested in Our Research?" }),
|
|
1176
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: import_ContactCTA.default.ctaText, children: "Follow our work, explore our publications, or get in touch to discuss potential collaborations." }),
|
|
1177
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_link4.default, { href: "/contact", className: import_ContactCTA.default.ctaButton, children: "Contact Us" })
|
|
1198
1178
|
] }) });
|
|
1199
1179
|
}
|
|
1200
1180
|
|