@prosophia/lab-minimal 0.0.3 → 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,352 @@
1
+ // src/components/ClientLayout.tsx
2
+ import { useEffect as useEffect3 } from "react";
3
+ import { ThemeProvider, useTheme as useTheme2 } from "next-themes";
4
+
5
+ // src/components/Header.tsx
6
+ import Link from "next/link";
7
+ import { useState as useState2, useEffect as useEffect2, useCallback } from "react";
8
+ import { usePathname } from "next/navigation";
9
+
10
+ // src/components/Layout.module.css
11
+ var Layout_default = {};
12
+
13
+ // src/components/ThemeToggle.tsx
14
+ import { useTheme } from "next-themes";
15
+ import { useEffect, useState } from "react";
16
+ import { motion } from "framer-motion";
17
+
18
+ // src/components/ThemeToggle.module.css
19
+ var ThemeToggle_default = {};
20
+
21
+ // src/components/ThemeToggle.tsx
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ function ThemeToggle() {
24
+ const { theme, setTheme, resolvedTheme } = useTheme();
25
+ const [mounted, setMounted] = useState(false);
26
+ useEffect(() => {
27
+ setMounted(true);
28
+ }, []);
29
+ if (!mounted) {
30
+ return /* @__PURE__ */ jsx("div", { className: ThemeToggle_default.togglePlaceholder });
31
+ }
32
+ const isDark = resolvedTheme === "dark";
33
+ const toggleTheme = () => {
34
+ setTheme(isDark ? "light" : "dark");
35
+ };
36
+ return /* @__PURE__ */ jsx(
37
+ motion.button,
38
+ {
39
+ className: ThemeToggle_default.toggle,
40
+ onClick: toggleTheme,
41
+ "aria-label": `Switch to ${isDark ? "light" : "dark"} mode`,
42
+ 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: [
45
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "5" }),
46
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
47
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
48
+ /* @__PURE__ */ jsx("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
49
+ /* @__PURE__ */ jsx("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
50
+ /* @__PURE__ */ jsx("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
51
+ /* @__PURE__ */ jsx("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
52
+ /* @__PURE__ */ jsx("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }),
53
+ /* @__PURE__ */ jsx("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })
54
+ ] }) }),
55
+ /* @__PURE__ */ jsx(
56
+ motion.span,
57
+ {
58
+ className: ThemeToggle_default.thumb,
59
+ animate: { x: isDark ? 26 : 0 },
60
+ transition: { type: "spring", stiffness: 500, damping: 30 }
61
+ }
62
+ ),
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" }) }) })
64
+ ] })
65
+ }
66
+ );
67
+ }
68
+
69
+ // src/components/Header.tsx
70
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
71
+ var navLinks = [
72
+ { href: "/research", label: "Research" },
73
+ { href: "/publications", label: "Publications" },
74
+ { href: "/people", label: "People" },
75
+ { href: "/news", label: "News" },
76
+ { href: "/pictures", label: "Gallery" }
77
+ ];
78
+ function Header({ settings }) {
79
+ const [menuOpen, setMenuOpen] = useState2(false);
80
+ const [scrolled, setScrolled] = useState2(false);
81
+ const pathname = usePathname();
82
+ useEffect2(() => {
83
+ const handleScroll = () => {
84
+ setScrolled(window.scrollY > 20);
85
+ };
86
+ window.addEventListener("scroll", handleScroll, { passive: true });
87
+ return () => window.removeEventListener("scroll", handleScroll);
88
+ }, []);
89
+ useEffect2(() => {
90
+ if (menuOpen) {
91
+ document.body.style.overflow = "hidden";
92
+ } else {
93
+ document.body.style.overflow = "";
94
+ }
95
+ return () => {
96
+ document.body.style.overflow = "";
97
+ };
98
+ }, [menuOpen]);
99
+ useEffect2(() => {
100
+ setMenuOpen(false);
101
+ }, [pathname]);
102
+ const handleKeyDown = useCallback((e) => {
103
+ if (e.key === "Escape" && menuOpen) {
104
+ setMenuOpen(false);
105
+ }
106
+ }, [menuOpen]);
107
+ useEffect2(() => {
108
+ document.addEventListener("keydown", handleKeyDown);
109
+ return () => document.removeEventListener("keydown", handleKeyDown);
110
+ }, [handleKeyDown]);
111
+ const isActive = (href) => {
112
+ if (href === "/") return pathname === "/";
113
+ return pathname.startsWith(href);
114
+ };
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: [
117
+ /* @__PURE__ */ jsxs2(
118
+ "svg",
119
+ {
120
+ width: "32",
121
+ height: "32",
122
+ viewBox: "0 0 24 24",
123
+ fill: "none",
124
+ xmlns: "http://www.w3.org/2000/svg",
125
+ "aria-hidden": "true",
126
+ children: [
127
+ /* @__PURE__ */ jsx2(
128
+ "path",
129
+ {
130
+ d: "M12 2L2 7L12 12L22 7L12 2Z",
131
+ stroke: "currentColor",
132
+ strokeWidth: "2",
133
+ strokeLinecap: "round",
134
+ strokeLinejoin: "round"
135
+ }
136
+ ),
137
+ /* @__PURE__ */ jsx2(
138
+ "path",
139
+ {
140
+ d: "M2 17L12 22L22 17",
141
+ stroke: "currentColor",
142
+ strokeWidth: "2",
143
+ strokeLinecap: "round",
144
+ strokeLinejoin: "round"
145
+ }
146
+ ),
147
+ /* @__PURE__ */ jsx2(
148
+ "path",
149
+ {
150
+ d: "M2 12L12 17L22 12",
151
+ stroke: "currentColor",
152
+ strokeWidth: "2",
153
+ strokeLinecap: "round",
154
+ strokeLinejoin: "round"
155
+ }
156
+ )
157
+ ]
158
+ }
159
+ ),
160
+ /* @__PURE__ */ jsxs2("span", { children: [
161
+ settings.labName || "Research",
162
+ settings.labNameAccent && /* @__PURE__ */ jsxs2("span", { className: Layout_default.navLogoAccent, children: [
163
+ " ",
164
+ settings.labNameAccent
165
+ ] })
166
+ ] })
167
+ ] }),
168
+ /* @__PURE__ */ jsx2("nav", { className: Layout_default.desktopNav, "aria-label": "Main navigation", children: navLinks.map((link) => /* @__PURE__ */ jsx2(
169
+ Link,
170
+ {
171
+ href: link.href,
172
+ className: `${Layout_default.navLink} ${isActive(link.href) ? Layout_default.navLinkActive : ""}`,
173
+ children: link.label
174
+ },
175
+ link.href
176
+ )) }),
177
+ /* @__PURE__ */ jsxs2("div", { className: Layout_default.navActions, children: [
178
+ /* @__PURE__ */ jsx2(ThemeToggle, {}),
179
+ /* @__PURE__ */ jsx2(Link, { href: "/contact", className: Layout_default.navCta, children: "Contact Us" })
180
+ ] }),
181
+ /* @__PURE__ */ jsx2(
182
+ "button",
183
+ {
184
+ className: Layout_default.menuButton,
185
+ onClick: () => setMenuOpen(!menuOpen),
186
+ "aria-label": menuOpen ? "Close menu" : "Open menu",
187
+ "aria-expanded": menuOpen,
188
+ "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 : ""}` })
193
+ ] })
194
+ }
195
+ ),
196
+ /* @__PURE__ */ jsxs2(
197
+ "div",
198
+ {
199
+ id: "mobile-menu",
200
+ className: `${Layout_default.mobileMenu} ${menuOpen ? Layout_default.mobileMenuOpen : ""}`,
201
+ "aria-hidden": !menuOpen,
202
+ children: [
203
+ /* @__PURE__ */ jsx2(
204
+ "div",
205
+ {
206
+ className: Layout_default.mobileMenuOverlay,
207
+ onClick: () => setMenuOpen(false),
208
+ "aria-hidden": "true"
209
+ }
210
+ ),
211
+ /* @__PURE__ */ jsxs2(
212
+ "nav",
213
+ {
214
+ className: Layout_default.mobileMenuContent,
215
+ "aria-label": "Mobile navigation",
216
+ children: [
217
+ navLinks.map((link, index) => /* @__PURE__ */ jsx2(
218
+ Link,
219
+ {
220
+ href: link.href,
221
+ className: `${Layout_default.mobileNavLink} ${isActive(link.href) ? Layout_default.mobileNavLinkActive : ""}`,
222
+ style: { animationDelay: `${index * 50}ms` },
223
+ tabIndex: menuOpen ? 0 : -1,
224
+ children: link.label
225
+ },
226
+ link.href
227
+ )),
228
+ /* @__PURE__ */ jsx2(
229
+ Link,
230
+ {
231
+ href: "/contact",
232
+ className: Layout_default.mobileNavCta,
233
+ style: { animationDelay: `${navLinks.length * 50}ms` },
234
+ tabIndex: menuOpen ? 0 : -1,
235
+ children: "Contact Us"
236
+ }
237
+ )
238
+ ]
239
+ }
240
+ )
241
+ ]
242
+ }
243
+ )
244
+ ] }) });
245
+ }
246
+
247
+ // src/components/Footer.tsx
248
+ import Link2 from "next/link";
249
+
250
+ // src/components/Footer.module.css
251
+ var Footer_default = {};
252
+
253
+ // src/lib/utils.ts
254
+ function isValidExternalUrl(url) {
255
+ if (!url || typeof url !== "string") return false;
256
+ try {
257
+ const parsed = new URL(url);
258
+ return parsed.protocol === "https:" || parsed.protocol === "http:";
259
+ } catch {
260
+ return false;
261
+ }
262
+ }
263
+
264
+ // src/components/Footer.tsx
265
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
266
+ var SocialIcon = ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, target: "_blank", rel: "noopener noreferrer", className: Footer_default.socialIcon, children });
267
+ function Footer({ settings }) {
268
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
269
+ const showPrivacy = settings?.showPrivacyPolicy !== false;
270
+ const showTerms = settings?.showTerms !== false;
271
+ const hasLegalLinks = showPrivacy || showTerms;
272
+ return /* @__PURE__ */ jsx3("footer", { className: Footer_default.footerWrapper, children: /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerContainer, children: [
273
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.mainFooter, children: [
274
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerAbout, children: [
275
+ /* @__PURE__ */ jsxs3(Link2, { href: "/", className: Footer_default.footerLogo, children: [
276
+ settings?.labName || "Cavendish",
277
+ " ",
278
+ /* @__PURE__ */ jsx3("span", { className: Footer_default.logoAccent, children: settings?.labNameAccent || "Lab" })
279
+ ] }),
280
+ /* @__PURE__ */ jsx3("p", { className: Footer_default.footerDescription, children: settings?.labNameDescription || "Advancing the frontiers of physics and our understanding of the universe." }),
281
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.socials, children: [
282
+ /* @__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" }) }) }),
283
+ /* @__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" }) }) })
284
+ ] })
285
+ ] }),
286
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerLinksGrid, children: [
287
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerColumn, children: [
288
+ /* @__PURE__ */ jsx3("h4", { children: "Quick Links" }),
289
+ /* @__PURE__ */ jsx3(Link2, { href: "/research", children: "Research" }),
290
+ /* @__PURE__ */ jsx3(Link2, { href: "/publications", children: "Publications" }),
291
+ /* @__PURE__ */ jsx3(Link2, { href: "/pictures", children: "Gallery" })
292
+ ] }),
293
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerColumn, children: [
294
+ /* @__PURE__ */ jsx3("h4", { children: "About" }),
295
+ /* @__PURE__ */ jsx3(Link2, { href: "/news", children: "News" }),
296
+ /* @__PURE__ */ jsx3(Link2, { href: "/people", children: "Our Team" }),
297
+ /* @__PURE__ */ jsx3(Link2, { href: "/contact", children: "Contact" })
298
+ ] }),
299
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerColumn, children: [
300
+ /* @__PURE__ */ jsx3("h4", { children: "Resources" }),
301
+ /* @__PURE__ */ jsx3(Link2, { href: "https://www.cam.ac.uk/", children: "University" }),
302
+ /* @__PURE__ */ jsx3(Link2, { href: "#", children: "Careers" })
303
+ ] })
304
+ ] })
305
+ ] }),
306
+ /* @__PURE__ */ jsxs3("div", { className: Footer_default.footerBottomBar, children: [
307
+ /* @__PURE__ */ jsx3("p", { children: settings?.footerText || `\xA9 ${currentYear} The Research Group. All Rights Reserved.` }),
308
+ hasLegalLinks && /* @__PURE__ */ jsxs3("div", { className: Footer_default.legalLinks, children: [
309
+ 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" })),
310
+ 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" }))
311
+ ] })
312
+ ] })
313
+ ] }) });
314
+ }
315
+
316
+ // src/components/ClientLayout.tsx
317
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
318
+ function ThemeBodySync() {
319
+ const { resolvedTheme } = useTheme2();
320
+ useEffect3(() => {
321
+ if (resolvedTheme === "dark") {
322
+ document.body.classList.add("dark-mode");
323
+ document.body.classList.remove("light-mode");
324
+ } else {
325
+ document.body.classList.add("light-mode");
326
+ document.body.classList.remove("dark-mode");
327
+ }
328
+ }, [resolvedTheme]);
329
+ return null;
330
+ }
331
+ function ClientLayout({ children, settings }) {
332
+ return /* @__PURE__ */ jsxs4(ThemeProvider, { attribute: "class", defaultTheme: "light", enableSystem: false, children: [
333
+ /* @__PURE__ */ jsx4(ThemeBodySync, {}),
334
+ /* @__PURE__ */ jsxs4("div", { className: "pageWrapper", children: [
335
+ /* @__PURE__ */ jsx4(Header, { settings }),
336
+ /* @__PURE__ */ jsx4("main", { children }),
337
+ /* @__PURE__ */ jsx4(Footer, { settings })
338
+ ] })
339
+ ] });
340
+ }
341
+
342
+ // src/layouts/RootLayout.tsx
343
+ import { jsx as jsx5 } from "react/jsx-runtime";
344
+ function RootLayout({
345
+ children,
346
+ settings = null
347
+ }) {
348
+ return /* @__PURE__ */ jsx5(ClientLayout, { settings: settings || {}, children });
349
+ }
350
+ export {
351
+ RootLayout
352
+ };
@@ -0,0 +1,182 @@
1
+ import * as sanity from 'sanity';
2
+
3
+ declare const schemaTypes: (({
4
+ type: "document";
5
+ name: "publication";
6
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
7
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
8
+ }) | ({
9
+ type: "document";
10
+ name: "person";
11
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
12
+ preview?: sanity.PreviewConfig<{
13
+ title: string;
14
+ subtitle: string;
15
+ media: string;
16
+ }, Record<"title" | "media" | "subtitle", any>> | undefined;
17
+ }) | ({
18
+ type: "array";
19
+ name: "blockContent";
20
+ } & Omit<sanity.ArrayDefinition, "preview">) | ({
21
+ type: "document";
22
+ name: "newsArticle";
23
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
24
+ preview?: sanity.PreviewConfig<{
25
+ title: string;
26
+ subtitle: string;
27
+ media: string;
28
+ }, Record<"title" | "media" | "subtitle", any>> | undefined;
29
+ }) | ({
30
+ type: "document";
31
+ name: "researchPage";
32
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
33
+ preview?: sanity.PreviewConfig<{
34
+ title: string;
35
+ }, Record<"title", any>> | undefined;
36
+ }) | ({
37
+ type: "document";
38
+ name: "bookPage";
39
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
40
+ preview?: sanity.PreviewConfig<{
41
+ title: string;
42
+ media: string;
43
+ }, Record<"title" | "media", any>> | undefined;
44
+ }) | ({
45
+ type: "document";
46
+ name: "contactPage";
47
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
48
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
49
+ }) | ({
50
+ type: "document";
51
+ name: "galleryImage";
52
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
53
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
54
+ }) | ({
55
+ type: "document";
56
+ name: "siteSettings";
57
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
58
+ preview?: sanity.PreviewConfig<{
59
+ title: string;
60
+ subtitle: string;
61
+ }, Record<"title" | "subtitle", any>> | undefined;
62
+ }) | ({
63
+ type: "document";
64
+ name: "homePage";
65
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
66
+ preview?: sanity.PreviewConfig<{
67
+ title: string;
68
+ media: string;
69
+ }, Record<"title" | "media", any>> | undefined;
70
+ }) | ({
71
+ type: "document";
72
+ name: "legalPage";
73
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
74
+ preview?: sanity.PreviewConfig<{
75
+ title: string;
76
+ pageType: string;
77
+ }, Record<"title" | "pageType", any>> | undefined;
78
+ }))[];
79
+
80
+ declare const _default$a: {
81
+ type: "document";
82
+ name: "publication";
83
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
84
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
85
+ };
86
+
87
+ declare const _default$9: {
88
+ type: "document";
89
+ name: "person";
90
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
91
+ preview?: sanity.PreviewConfig<{
92
+ title: string;
93
+ subtitle: string;
94
+ media: string;
95
+ }, Record<"title" | "media" | "subtitle", any>> | undefined;
96
+ };
97
+
98
+ /**
99
+ * This is the schema definition for the rich text fields used for
100
+ * article content. When you import it in other schemas, you can specify
101
+ * `name` and `title` properties to suit your needs.
102
+ */
103
+ declare const _default$8: {
104
+ type: "array";
105
+ name: "blockContent";
106
+ } & Omit<sanity.ArrayDefinition, "preview">;
107
+
108
+ declare const _default$7: {
109
+ type: "document";
110
+ name: "newsArticle";
111
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
112
+ preview?: sanity.PreviewConfig<{
113
+ title: string;
114
+ subtitle: string;
115
+ media: string;
116
+ }, Record<"title" | "media" | "subtitle", any>> | undefined;
117
+ };
118
+
119
+ declare const _default$6: {
120
+ type: "document";
121
+ name: "researchPage";
122
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
123
+ preview?: sanity.PreviewConfig<{
124
+ title: string;
125
+ }, Record<"title", any>> | undefined;
126
+ };
127
+
128
+ declare const _default$5: {
129
+ type: "document";
130
+ name: "bookPage";
131
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
132
+ preview?: sanity.PreviewConfig<{
133
+ title: string;
134
+ media: string;
135
+ }, Record<"title" | "media", any>> | undefined;
136
+ };
137
+
138
+ declare const _default$4: {
139
+ type: "document";
140
+ name: "contactPage";
141
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
142
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
143
+ };
144
+
145
+ declare const _default$3: {
146
+ type: "document";
147
+ name: "galleryImage";
148
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
149
+ preview?: sanity.PreviewConfig<Record<string, string>, Record<never, any>> | undefined;
150
+ };
151
+
152
+ declare const _default$2: {
153
+ type: "document";
154
+ name: "siteSettings";
155
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
156
+ preview?: sanity.PreviewConfig<{
157
+ title: string;
158
+ subtitle: string;
159
+ }, Record<"title" | "subtitle", any>> | undefined;
160
+ };
161
+
162
+ declare const _default$1: {
163
+ type: "document";
164
+ name: "homePage";
165
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
166
+ preview?: sanity.PreviewConfig<{
167
+ title: string;
168
+ media: string;
169
+ }, Record<"title" | "media", any>> | undefined;
170
+ };
171
+
172
+ declare const _default: {
173
+ type: "document";
174
+ name: "legalPage";
175
+ } & Omit<sanity.DocumentDefinition, "preview"> & {
176
+ preview?: sanity.PreviewConfig<{
177
+ title: string;
178
+ pageType: string;
179
+ }, Record<"title" | "pageType", any>> | undefined;
180
+ };
181
+
182
+ export { _default$8 as blockContent, _default$5 as bookPage, _default$4 as contactPage, _default$3 as galleryImage, _default$1 as homePage, _default as legalPage, _default$7 as newsArticle, _default$9 as person, _default$a as publication, _default$6 as researchPage, schemaTypes, schemaTypes as schemas, _default$2 as siteSettings };