@prosophia/lab-minimal 0.0.2 → 0.0.4

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.
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/layouts/index.ts
31
+ var layouts_exports = {};
32
+ __export(layouts_exports, {
33
+ RootLayout: () => RootLayout
34
+ });
35
+ module.exports = __toCommonJS(layouts_exports);
36
+
37
+ // src/components/ClientLayout.tsx
38
+ var import_react3 = require("react");
39
+ var import_next_themes2 = require("next-themes");
40
+
41
+ // src/components/Header.tsx
42
+ var import_link = __toESM(require("next/link"));
43
+ var import_react2 = require("react");
44
+ var import_navigation = require("next/navigation");
45
+
46
+ // src/components/Layout.module.css
47
+ var Layout_default = {};
48
+
49
+ // src/components/ThemeToggle.tsx
50
+ var import_next_themes = require("next-themes");
51
+ var import_react = require("react");
52
+ var import_framer_motion = require("framer-motion");
53
+
54
+ // src/components/ThemeToggle.module.css
55
+ var ThemeToggle_default = {};
56
+
57
+ // src/components/ThemeToggle.tsx
58
+ var import_jsx_runtime = require("react/jsx-runtime");
59
+ function ThemeToggle() {
60
+ const { theme, setTheme, resolvedTheme } = (0, import_next_themes.useTheme)();
61
+ const [mounted, setMounted] = (0, import_react.useState)(false);
62
+ (0, import_react.useEffect)(() => {
63
+ setMounted(true);
64
+ }, []);
65
+ if (!mounted) {
66
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: ThemeToggle_default.togglePlaceholder });
67
+ }
68
+ const isDark = resolvedTheme === "dark";
69
+ const toggleTheme = () => {
70
+ setTheme(isDark ? "light" : "dark");
71
+ };
72
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
73
+ import_framer_motion.motion.button,
74
+ {
75
+ className: ThemeToggle_default.toggle,
76
+ onClick: toggleTheme,
77
+ "aria-label": `Switch to ${isDark ? "light" : "dark"} mode`,
78
+ whileTap: { scale: 0.95 },
79
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: ThemeToggle_default.track, children: [
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `${ThemeToggle_default.icon} ${ThemeToggle_default.sunIcon} ${!isDark ? ThemeToggle_default.iconActive : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
81
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "5" }),
82
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })
90
+ ] }) }),
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
92
+ import_framer_motion.motion.span,
93
+ {
94
+ className: ThemeToggle_default.thumb,
95
+ animate: { x: isDark ? 26 : 0 },
96
+ transition: { type: "spring", stiffness: 500, damping: 30 }
97
+ }
98
+ ),
99
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `${ThemeToggle_default.icon} ${ThemeToggle_default.moonIcon} ${isDark ? ThemeToggle_default.iconActive : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime.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_runtime.jsx)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }) })
100
+ ] })
101
+ }
102
+ );
103
+ }
104
+
105
+ // src/components/Header.tsx
106
+ var import_jsx_runtime2 = require("react/jsx-runtime");
107
+ var navLinks = [
108
+ { href: "/research", label: "Research" },
109
+ { href: "/publications", label: "Publications" },
110
+ { href: "/people", label: "People" },
111
+ { href: "/news", label: "News" },
112
+ { href: "/pictures", label: "Gallery" }
113
+ ];
114
+ function Header({ settings }) {
115
+ const [menuOpen, setMenuOpen] = (0, import_react2.useState)(false);
116
+ const [scrolled, setScrolled] = (0, import_react2.useState)(false);
117
+ const pathname = (0, import_navigation.usePathname)();
118
+ (0, import_react2.useEffect)(() => {
119
+ const handleScroll = () => {
120
+ setScrolled(window.scrollY > 20);
121
+ };
122
+ window.addEventListener("scroll", handleScroll, { passive: true });
123
+ return () => window.removeEventListener("scroll", handleScroll);
124
+ }, []);
125
+ (0, import_react2.useEffect)(() => {
126
+ if (menuOpen) {
127
+ document.body.style.overflow = "hidden";
128
+ } else {
129
+ document.body.style.overflow = "";
130
+ }
131
+ return () => {
132
+ document.body.style.overflow = "";
133
+ };
134
+ }, [menuOpen]);
135
+ (0, import_react2.useEffect)(() => {
136
+ setMenuOpen(false);
137
+ }, [pathname]);
138
+ const handleKeyDown = (0, import_react2.useCallback)((e) => {
139
+ if (e.key === "Escape" && menuOpen) {
140
+ setMenuOpen(false);
141
+ }
142
+ }, [menuOpen]);
143
+ (0, import_react2.useEffect)(() => {
144
+ document.addEventListener("keydown", handleKeyDown);
145
+ return () => document.removeEventListener("keydown", handleKeyDown);
146
+ }, [handleKeyDown]);
147
+ const isActive = (href) => {
148
+ if (href === "/") return pathname === "/";
149
+ return pathname.startsWith(href);
150
+ };
151
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("header", { className: `${Layout_default.header} ${scrolled ? Layout_default.headerScrolled : ""}`, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: Layout_default.navContainer, children: [
152
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_link.default, { href: "/", className: Layout_default.navLogo, "aria-label": "Go to homepage", children: [
153
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
154
+ "svg",
155
+ {
156
+ width: "32",
157
+ height: "32",
158
+ viewBox: "0 0 24 24",
159
+ fill: "none",
160
+ xmlns: "http://www.w3.org/2000/svg",
161
+ "aria-hidden": "true",
162
+ children: [
163
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
164
+ "path",
165
+ {
166
+ d: "M12 2L2 7L12 12L22 7L12 2Z",
167
+ stroke: "currentColor",
168
+ strokeWidth: "2",
169
+ strokeLinecap: "round",
170
+ strokeLinejoin: "round"
171
+ }
172
+ ),
173
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
174
+ "path",
175
+ {
176
+ d: "M2 17L12 22L22 17",
177
+ stroke: "currentColor",
178
+ strokeWidth: "2",
179
+ strokeLinecap: "round",
180
+ strokeLinejoin: "round"
181
+ }
182
+ ),
183
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
184
+ "path",
185
+ {
186
+ d: "M2 12L12 17L22 12",
187
+ stroke: "currentColor",
188
+ strokeWidth: "2",
189
+ strokeLinecap: "round",
190
+ strokeLinejoin: "round"
191
+ }
192
+ )
193
+ ]
194
+ }
195
+ ),
196
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { children: [
197
+ settings.labName || "Research",
198
+ settings.labNameAccent && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: Layout_default.navLogoAccent, children: [
199
+ " ",
200
+ settings.labNameAccent
201
+ ] })
202
+ ] })
203
+ ] }),
204
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("nav", { className: Layout_default.desktopNav, "aria-label": "Main navigation", children: navLinks.map((link) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
205
+ import_link.default,
206
+ {
207
+ href: link.href,
208
+ className: `${Layout_default.navLink} ${isActive(link.href) ? Layout_default.navLinkActive : ""}`,
209
+ children: link.label
210
+ },
211
+ link.href
212
+ )) }),
213
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: Layout_default.navActions, children: [
214
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThemeToggle, {}),
215
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_link.default, { href: "/contact", className: Layout_default.navCta, children: "Contact Us" })
216
+ ] }),
217
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
218
+ "button",
219
+ {
220
+ className: Layout_default.menuButton,
221
+ onClick: () => setMenuOpen(!menuOpen),
222
+ "aria-label": menuOpen ? "Close menu" : "Open menu",
223
+ "aria-expanded": menuOpen,
224
+ "aria-controls": "mobile-menu",
225
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: Layout_default.menuButtonLines, children: [
226
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen1 : ""}` }),
227
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen2 : ""}` }),
228
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: `${Layout_default.menuLine} ${menuOpen ? Layout_default.menuLineOpen3 : ""}` })
229
+ ] })
230
+ }
231
+ ),
232
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
233
+ "div",
234
+ {
235
+ id: "mobile-menu",
236
+ className: `${Layout_default.mobileMenu} ${menuOpen ? Layout_default.mobileMenuOpen : ""}`,
237
+ "aria-hidden": !menuOpen,
238
+ children: [
239
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
240
+ "div",
241
+ {
242
+ className: Layout_default.mobileMenuOverlay,
243
+ onClick: () => setMenuOpen(false),
244
+ "aria-hidden": "true"
245
+ }
246
+ ),
247
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
248
+ "nav",
249
+ {
250
+ className: Layout_default.mobileMenuContent,
251
+ "aria-label": "Mobile navigation",
252
+ children: [
253
+ navLinks.map((link, index) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
254
+ import_link.default,
255
+ {
256
+ href: link.href,
257
+ className: `${Layout_default.mobileNavLink} ${isActive(link.href) ? Layout_default.mobileNavLinkActive : ""}`,
258
+ style: { animationDelay: `${index * 50}ms` },
259
+ tabIndex: menuOpen ? 0 : -1,
260
+ children: link.label
261
+ },
262
+ link.href
263
+ )),
264
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
265
+ import_link.default,
266
+ {
267
+ href: "/contact",
268
+ className: Layout_default.mobileNavCta,
269
+ style: { animationDelay: `${navLinks.length * 50}ms` },
270
+ tabIndex: menuOpen ? 0 : -1,
271
+ children: "Contact Us"
272
+ }
273
+ )
274
+ ]
275
+ }
276
+ )
277
+ ]
278
+ }
279
+ )
280
+ ] }) });
281
+ }
282
+
283
+ // src/components/Footer.tsx
284
+ var import_link2 = __toESM(require("next/link"));
285
+
286
+ // src/components/Footer.module.css
287
+ var Footer_default = {};
288
+
289
+ // src/lib/utils.ts
290
+ function isValidExternalUrl(url) {
291
+ if (!url || typeof url !== "string") return false;
292
+ try {
293
+ const parsed = new URL(url);
294
+ return parsed.protocol === "https:" || parsed.protocol === "http:";
295
+ } catch {
296
+ return false;
297
+ }
298
+ }
299
+
300
+ // src/components/Footer.tsx
301
+ var import_jsx_runtime3 = require("react/jsx-runtime");
302
+ var SocialIcon = ({ href, children }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href, target: "_blank", rel: "noopener noreferrer", className: Footer_default.socialIcon, children });
303
+ function Footer({ settings }) {
304
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
305
+ const showPrivacy = settings?.showPrivacyPolicy !== false;
306
+ const showTerms = settings?.showTerms !== false;
307
+ const hasLegalLinks = showPrivacy || showTerms;
308
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("footer", { className: Footer_default.footerWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerContainer, children: [
309
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.mainFooter, children: [
310
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerAbout, children: [
311
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_link2.default, { href: "/", className: Footer_default.footerLogo, children: [
312
+ settings?.labName || "Cavendish",
313
+ " ",
314
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: Footer_default.logoAccent, children: settings?.labNameAccent || "Lab" })
315
+ ] }),
316
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: Footer_default.footerDescription, children: settings?.labNameDescription || "Advancing the frontiers of physics and our understanding of the universe." }),
317
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.socials, children: [
318
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SocialIcon, { href: "#", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime3.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" }) }) }),
319
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SocialIcon, { href: "#", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime3.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" }) }) })
320
+ ] })
321
+ ] }),
322
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerLinksGrid, children: [
323
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerColumn, children: [
324
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h4", { children: "Quick Links" }),
325
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/research", children: "Research" }),
326
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/publications", children: "Publications" }),
327
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/pictures", children: "Gallery" })
328
+ ] }),
329
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerColumn, children: [
330
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h4", { children: "About" }),
331
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/news", children: "News" }),
332
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/people", children: "Our Team" }),
333
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/contact", children: "Contact" })
334
+ ] }),
335
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerColumn, children: [
336
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h4", { children: "Resources" }),
337
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "https://www.cam.ac.uk/", children: "University" }),
338
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "#", children: "Careers" })
339
+ ] })
340
+ ] })
341
+ ] }),
342
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.footerBottomBar, children: [
343
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { children: settings?.footerText || `\xA9 ${currentYear} The Research Group. All Rights Reserved.` }),
344
+ hasLegalLinks && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: Footer_default.legalLinks, children: [
345
+ showPrivacy && (settings?.privacyPolicyUrl && isValidExternalUrl(settings.privacyPolicyUrl) ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: settings.privacyPolicyUrl, target: "_blank", rel: "noopener noreferrer", children: "Privacy Policy" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/privacy", children: "Privacy Policy" })),
346
+ showTerms && (settings?.termsUrl && isValidExternalUrl(settings.termsUrl) ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("a", { href: settings.termsUrl, target: "_blank", rel: "noopener noreferrer", children: "Terms & Conditions" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_link2.default, { href: "/terms", children: "Terms & Conditions" }))
347
+ ] })
348
+ ] })
349
+ ] }) });
350
+ }
351
+
352
+ // src/components/ClientLayout.tsx
353
+ var import_jsx_runtime4 = require("react/jsx-runtime");
354
+ function ThemeBodySync() {
355
+ const { resolvedTheme } = (0, import_next_themes2.useTheme)();
356
+ (0, import_react3.useEffect)(() => {
357
+ if (resolvedTheme === "dark") {
358
+ document.body.classList.add("dark-mode");
359
+ document.body.classList.remove("light-mode");
360
+ } else {
361
+ document.body.classList.add("light-mode");
362
+ document.body.classList.remove("dark-mode");
363
+ }
364
+ }, [resolvedTheme]);
365
+ return null;
366
+ }
367
+ function ClientLayout({ children, settings }) {
368
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_next_themes2.ThemeProvider, { attribute: "class", defaultTheme: "light", enableSystem: false, children: [
369
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThemeBodySync, {}),
370
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "pageWrapper", children: [
371
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Header, { settings }),
372
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("main", { children }),
373
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Footer, { settings })
374
+ ] })
375
+ ] });
376
+ }
377
+
378
+ // src/layouts/RootLayout.tsx
379
+ var import_jsx_runtime5 = require("react/jsx-runtime");
380
+ function RootLayout({
381
+ children,
382
+ settings = null
383
+ }) {
384
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ClientLayout, { settings: settings || {}, children });
385
+ }
386
+ // Annotate the CommonJS export names for ESM import in node:
387
+ 0 && (module.exports = {
388
+ RootLayout
389
+ });