@prosophia/lab-classic 0.0.3 → 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/BookPage.module.css +314 -0
- package/dist/ContactCTA.module.css +99 -0
- package/dist/ContactPage.module.css +259 -0
- package/dist/Footer.module.css +240 -0
- package/dist/HomePage.module.css +879 -0
- package/dist/Layout.module.css +368 -0
- package/dist/LegalPage.module.css +239 -0
- package/dist/NewsArticlePage.module.css +214 -0
- package/dist/NewsPage.module.css +189 -0
- package/dist/PastMembersPage.module.css +236 -0
- package/dist/PeoplePage.module.css +465 -0
- package/dist/PicturesPage.module.css +196 -0
- package/dist/PublicationDetailPage.module.css +213 -0
- package/dist/PublicationsPage.module.css +181 -0
- package/dist/ResearchPage.module.css +173 -0
- package/dist/ThemeToggle.module.css +114 -0
- package/dist/index-CSdV51Jq.d.mts +26 -0
- package/dist/index-CSdV51Jq.d.ts +26 -0
- package/dist/index.d.mts +279 -0
- package/dist/index.d.ts +279 -0
- package/dist/index.js +780 -40
- package/dist/index.mjs +730 -31
- package/dist/layouts/index.d.mts +13 -0
- package/dist/layouts/index.d.ts +13 -0
- package/dist/layouts/index.js +380 -0
- package/dist/layouts/index.mjs +344 -0
- package/dist/schemas/index.d.mts +182 -0
- package/dist/schemas/index.d.ts +182 -0
- package/dist/schemas/index.js +1025 -0
- package/dist/schemas/index.mjs +987 -0
- package/package.json +14 -3
package/dist/index.js
CHANGED
|
@@ -30,12 +30,53 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
+
AnimatedCard: () => AnimatedCard,
|
|
34
|
+
AnimatedGalleryGrid: () => AnimatedGalleryGrid,
|
|
35
|
+
AnimatedGalleryHeader: () => AnimatedGalleryHeader,
|
|
36
|
+
AnimatedGrid: () => AnimatedGrid,
|
|
37
|
+
AnimatedHeader: () => AnimatedHeader,
|
|
33
38
|
AnimatedHero: () => AnimatedHero,
|
|
39
|
+
AnimatedHeroContent: () => AnimatedHeroContent,
|
|
40
|
+
AnimatedImage: () => AnimatedImage,
|
|
41
|
+
AnimatedItem: () => AnimatedItem,
|
|
42
|
+
AnimatedList: () => AnimatedList,
|
|
43
|
+
AnimatedMain: () => AnimatedMain,
|
|
44
|
+
AnimatedPage: () => AnimatedPage,
|
|
45
|
+
AnimatedSection: () => AnimatedSection,
|
|
46
|
+
AnimatedSectionHeader: () => AnimatedSectionHeader,
|
|
47
|
+
AnimatedStats: () => AnimatedStats,
|
|
34
48
|
ClientLayout: () => ClientLayout,
|
|
35
49
|
ContactCTA: () => ContactCTA,
|
|
36
50
|
Footer: () => Footer,
|
|
37
51
|
Header: () => Header,
|
|
38
|
-
|
|
52
|
+
HomePage: () => HomePage,
|
|
53
|
+
ScrollRevealSection: () => ScrollRevealSection,
|
|
54
|
+
StaggeredGrid: () => StaggeredGrid,
|
|
55
|
+
ThemeToggle: () => ThemeToggle,
|
|
56
|
+
cardHover: () => cardHover,
|
|
57
|
+
client: () => client,
|
|
58
|
+
defineConfig: () => defineConfig,
|
|
59
|
+
escapeHtml: () => escapeHtml,
|
|
60
|
+
fadeIn: () => fadeIn,
|
|
61
|
+
fadeInUp: () => fadeInUp,
|
|
62
|
+
fadeInUpShort: () => fadeInUpShort,
|
|
63
|
+
getClient: () => getClient,
|
|
64
|
+
imageZoom: () => imageZoom,
|
|
65
|
+
isValidEmail: () => isValidEmail,
|
|
66
|
+
isValidExternalUrl: () => isValidExternalUrl,
|
|
67
|
+
isValidGoogleMapsEmbedUrl: () => isValidGoogleMapsEmbedUrl,
|
|
68
|
+
isValidSlug: () => isValidSlug,
|
|
69
|
+
pageTransition: () => pageTransition,
|
|
70
|
+
reducedMotion: () => reducedMotion,
|
|
71
|
+
sanitizeUrl: () => sanitizeUrl,
|
|
72
|
+
scaleIn: () => scaleIn,
|
|
73
|
+
scrollReveal: () => scrollReveal,
|
|
74
|
+
slideInLeft: () => slideInLeft,
|
|
75
|
+
slideInRight: () => slideInRight,
|
|
76
|
+
staggerContainer: () => staggerContainer,
|
|
77
|
+
staggerItem: () => staggerItem,
|
|
78
|
+
urlFor: () => urlFor,
|
|
79
|
+
viewportSettings: () => viewportSettings
|
|
39
80
|
});
|
|
40
81
|
module.exports = __toCommonJS(index_exports);
|
|
41
82
|
|
|
@@ -43,6 +84,16 @@ module.exports = __toCommonJS(index_exports);
|
|
|
43
84
|
var import_framer_motion = require("framer-motion");
|
|
44
85
|
|
|
45
86
|
// src/lib/animations.ts
|
|
87
|
+
var fadeIn = {
|
|
88
|
+
hidden: { opacity: 0 },
|
|
89
|
+
visible: {
|
|
90
|
+
opacity: 1,
|
|
91
|
+
transition: {
|
|
92
|
+
duration: 0.6,
|
|
93
|
+
ease: [0.65, 0, 0.35, 1]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
46
97
|
var fadeInUp = {
|
|
47
98
|
hidden: { opacity: 0, y: 30 },
|
|
48
99
|
visible: {
|
|
@@ -54,6 +105,17 @@ var fadeInUp = {
|
|
|
54
105
|
}
|
|
55
106
|
}
|
|
56
107
|
};
|
|
108
|
+
var fadeInUpShort = {
|
|
109
|
+
hidden: { opacity: 0, y: 20 },
|
|
110
|
+
visible: {
|
|
111
|
+
opacity: 1,
|
|
112
|
+
y: 0,
|
|
113
|
+
transition: {
|
|
114
|
+
duration: 0.6,
|
|
115
|
+
ease: [0.4, 0, 0.2, 1]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
57
119
|
var scaleIn = {
|
|
58
120
|
hidden: { opacity: 0, scale: 0.9 },
|
|
59
121
|
visible: {
|
|
@@ -65,9 +127,155 @@ var scaleIn = {
|
|
|
65
127
|
}
|
|
66
128
|
}
|
|
67
129
|
};
|
|
130
|
+
var slideInRight = {
|
|
131
|
+
hidden: { opacity: 0, x: 20 },
|
|
132
|
+
visible: {
|
|
133
|
+
opacity: 1,
|
|
134
|
+
x: 0,
|
|
135
|
+
transition: {
|
|
136
|
+
duration: 0.6,
|
|
137
|
+
ease: [0.4, 0, 0.2, 1]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
var slideInLeft = {
|
|
142
|
+
hidden: { opacity: 0, x: -20 },
|
|
143
|
+
visible: {
|
|
144
|
+
opacity: 1,
|
|
145
|
+
x: 0,
|
|
146
|
+
transition: {
|
|
147
|
+
duration: 0.6,
|
|
148
|
+
ease: [0.4, 0, 0.2, 1]
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
var staggerContainer = {
|
|
153
|
+
hidden: { opacity: 0 },
|
|
154
|
+
visible: {
|
|
155
|
+
opacity: 1,
|
|
156
|
+
transition: {
|
|
157
|
+
staggerChildren: 0.1,
|
|
158
|
+
delayChildren: 0.2
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
var staggerItem = {
|
|
163
|
+
hidden: { opacity: 0, y: 20 },
|
|
164
|
+
visible: {
|
|
165
|
+
opacity: 1,
|
|
166
|
+
y: 0,
|
|
167
|
+
transition: {
|
|
168
|
+
duration: 0.5,
|
|
169
|
+
ease: [0.4, 0, 0.2, 1]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
var cardHover = {
|
|
174
|
+
hover: {
|
|
175
|
+
y: -8,
|
|
176
|
+
transition: {
|
|
177
|
+
duration: 0.3,
|
|
178
|
+
ease: [0.4, 0, 0.2, 1]
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
var imageZoom = {
|
|
183
|
+
hover: {
|
|
184
|
+
scale: 1.08,
|
|
185
|
+
transition: {
|
|
186
|
+
duration: 0.5,
|
|
187
|
+
ease: [0.65, 0, 0.35, 1]
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
var pageTransition = {
|
|
192
|
+
hidden: { opacity: 0, y: 20 },
|
|
193
|
+
visible: {
|
|
194
|
+
opacity: 1,
|
|
195
|
+
y: 0,
|
|
196
|
+
transition: {
|
|
197
|
+
duration: 0.6,
|
|
198
|
+
ease: [0.4, 0, 0.2, 1]
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
exit: {
|
|
202
|
+
opacity: 0,
|
|
203
|
+
y: -20,
|
|
204
|
+
transition: {
|
|
205
|
+
duration: 0.4,
|
|
206
|
+
ease: [0.4, 0, 0.2, 1]
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
var viewportSettings = {
|
|
211
|
+
once: true,
|
|
212
|
+
amount: 0.3,
|
|
213
|
+
margin: "0px 0px -100px 0px"
|
|
214
|
+
};
|
|
215
|
+
var scrollReveal = {
|
|
216
|
+
hidden: { opacity: 0, y: 50 },
|
|
217
|
+
visible: {
|
|
218
|
+
opacity: 1,
|
|
219
|
+
y: 0,
|
|
220
|
+
transition: {
|
|
221
|
+
duration: 0.8,
|
|
222
|
+
ease: [0.65, 0, 0.35, 1]
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
var reducedMotion = {
|
|
227
|
+
hidden: { opacity: 0 },
|
|
228
|
+
visible: {
|
|
229
|
+
opacity: 1,
|
|
230
|
+
transition: {
|
|
231
|
+
duration: 0.01
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
|
68
235
|
|
|
69
236
|
// src/components/AnimatedCard.tsx
|
|
70
237
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
238
|
+
function AnimatedCard({ children, className, delay = 0 }) {
|
|
239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
240
|
+
import_framer_motion.motion.div,
|
|
241
|
+
{
|
|
242
|
+
className,
|
|
243
|
+
initial: "hidden",
|
|
244
|
+
whileInView: "visible",
|
|
245
|
+
viewport: viewportSettings,
|
|
246
|
+
variants: {
|
|
247
|
+
hidden: { opacity: 0, y: 30 },
|
|
248
|
+
visible: {
|
|
249
|
+
opacity: 1,
|
|
250
|
+
y: 0,
|
|
251
|
+
transition: {
|
|
252
|
+
duration: 0.6,
|
|
253
|
+
delay,
|
|
254
|
+
ease: [0.4, 0, 0.2, 1]
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
whileHover: "hover",
|
|
259
|
+
children
|
|
260
|
+
}
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
function AnimatedImage({ children, className }) {
|
|
264
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framer_motion.motion.div, { className, variants: imageZoom, children });
|
|
265
|
+
}
|
|
266
|
+
function AnimatedSection({ children, className }) {
|
|
267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
268
|
+
import_framer_motion.motion.section,
|
|
269
|
+
{
|
|
270
|
+
className,
|
|
271
|
+
initial: "hidden",
|
|
272
|
+
whileInView: "visible",
|
|
273
|
+
viewport: viewportSettings,
|
|
274
|
+
variants: fadeInUpShort,
|
|
275
|
+
children
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
}
|
|
71
279
|
|
|
72
280
|
// src/components/AnimatedGallery.tsx
|
|
73
281
|
var import_framer_motion2 = require("framer-motion");
|
|
@@ -75,29 +283,422 @@ var import_image = __toESM(require("next/image"));
|
|
|
75
283
|
var import_react = require("react");
|
|
76
284
|
var import_PicturesPage = __toESM(require("./PicturesPage.module.css"));
|
|
77
285
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
286
|
+
function useMounted() {
|
|
287
|
+
const [mounted, setMounted] = (0, import_react.useState)(false);
|
|
288
|
+
(0, import_react.useEffect)(() => {
|
|
289
|
+
setMounted(true);
|
|
290
|
+
}, []);
|
|
291
|
+
return mounted;
|
|
292
|
+
}
|
|
293
|
+
function AnimatedGalleryHeader({ children, className }) {
|
|
294
|
+
const mounted = useMounted();
|
|
295
|
+
if (!mounted) {
|
|
296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("header", { className, children });
|
|
297
|
+
}
|
|
298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
299
|
+
import_framer_motion2.motion.header,
|
|
300
|
+
{
|
|
301
|
+
className,
|
|
302
|
+
initial: { opacity: 0, y: 30 },
|
|
303
|
+
animate: { opacity: 1, y: 0 },
|
|
304
|
+
transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] },
|
|
305
|
+
children
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
function AnimatedGalleryGrid({ images }) {
|
|
310
|
+
const mounted = useMounted();
|
|
311
|
+
if (!mounted) {
|
|
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)(
|
|
314
|
+
import_image.default,
|
|
315
|
+
{
|
|
316
|
+
src: pic.imageUrl,
|
|
317
|
+
alt: pic.altText,
|
|
318
|
+
width: pic.width,
|
|
319
|
+
height: pic.height,
|
|
320
|
+
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
321
|
+
className: import_PicturesPage.default.photoImage
|
|
322
|
+
}
|
|
323
|
+
) }),
|
|
324
|
+
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: import_PicturesPage.default.photoCaption, children: pic.caption })
|
|
325
|
+
] }, pic._id)) });
|
|
326
|
+
}
|
|
327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
328
|
+
import_framer_motion2.motion.div,
|
|
329
|
+
{
|
|
330
|
+
className: import_PicturesPage.default.photosGrid,
|
|
331
|
+
initial: "hidden",
|
|
332
|
+
animate: "visible",
|
|
333
|
+
variants: {
|
|
334
|
+
hidden: { opacity: 0 },
|
|
335
|
+
visible: {
|
|
336
|
+
opacity: 1,
|
|
337
|
+
transition: {
|
|
338
|
+
staggerChildren: 0.08,
|
|
339
|
+
delayChildren: 0.2
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
children: images.map((pic) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
344
|
+
import_framer_motion2.motion.div,
|
|
345
|
+
{
|
|
346
|
+
className: import_PicturesPage.default.photoCard,
|
|
347
|
+
variants: {
|
|
348
|
+
hidden: { opacity: 0, y: 40, scale: 0.95 },
|
|
349
|
+
visible: {
|
|
350
|
+
opacity: 1,
|
|
351
|
+
y: 0,
|
|
352
|
+
scale: 1,
|
|
353
|
+
transition: {
|
|
354
|
+
duration: 0.6,
|
|
355
|
+
ease: [0.4, 0, 0.2, 1]
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
whileHover: {
|
|
360
|
+
scale: 1.05,
|
|
361
|
+
transition: { duration: 0.3 }
|
|
362
|
+
},
|
|
363
|
+
children: [
|
|
364
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: import_PicturesPage.default.photoImageWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
365
|
+
import_image.default,
|
|
366
|
+
{
|
|
367
|
+
src: pic.imageUrl,
|
|
368
|
+
alt: pic.altText,
|
|
369
|
+
width: pic.width,
|
|
370
|
+
height: pic.height,
|
|
371
|
+
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
372
|
+
className: import_PicturesPage.default.photoImage
|
|
373
|
+
}
|
|
374
|
+
) }),
|
|
375
|
+
pic.caption && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: import_PicturesPage.default.photoCaption, children: pic.caption })
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
pic._id
|
|
379
|
+
))
|
|
380
|
+
}
|
|
381
|
+
);
|
|
382
|
+
}
|
|
78
383
|
|
|
79
|
-
// src/components/
|
|
384
|
+
// src/components/AnimatedPage.tsx
|
|
80
385
|
var import_framer_motion3 = require("framer-motion");
|
|
81
386
|
var import_react2 = require("react");
|
|
387
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
388
|
+
function useMounted2() {
|
|
389
|
+
const [mounted, setMounted] = (0, import_react2.useState)(false);
|
|
390
|
+
(0, import_react2.useEffect)(() => {
|
|
391
|
+
setMounted(true);
|
|
392
|
+
}, []);
|
|
393
|
+
return mounted;
|
|
394
|
+
}
|
|
395
|
+
function AnimatedPage({ children, className }) {
|
|
396
|
+
const mounted = useMounted2();
|
|
397
|
+
if (!mounted) {
|
|
398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, children });
|
|
399
|
+
}
|
|
400
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
401
|
+
import_framer_motion3.motion.div,
|
|
402
|
+
{
|
|
403
|
+
className,
|
|
404
|
+
initial: { opacity: 0 },
|
|
405
|
+
animate: { opacity: 1 },
|
|
406
|
+
transition: { duration: 0.6, ease: [0.4, 0, 0.2, 1] },
|
|
407
|
+
children
|
|
408
|
+
}
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
function AnimatedHeader({ children, className }) {
|
|
412
|
+
const mounted = useMounted2();
|
|
413
|
+
if (!mounted) {
|
|
414
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("header", { className, children });
|
|
415
|
+
}
|
|
416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
417
|
+
import_framer_motion3.motion.header,
|
|
418
|
+
{
|
|
419
|
+
className,
|
|
420
|
+
initial: { opacity: 0, y: 30 },
|
|
421
|
+
animate: { opacity: 1, y: 0 },
|
|
422
|
+
transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] },
|
|
423
|
+
children
|
|
424
|
+
}
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
function AnimatedMain({ children, className }) {
|
|
428
|
+
const mounted = useMounted2();
|
|
429
|
+
if (!mounted) {
|
|
430
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("main", { className, children });
|
|
431
|
+
}
|
|
432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
433
|
+
import_framer_motion3.motion.main,
|
|
434
|
+
{
|
|
435
|
+
className,
|
|
436
|
+
initial: { opacity: 0, y: 20 },
|
|
437
|
+
animate: { opacity: 1, y: 0 },
|
|
438
|
+
transition: { duration: 0.6, delay: 0.2, ease: [0.4, 0, 0.2, 1] },
|
|
439
|
+
children
|
|
440
|
+
}
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
function StaggeredGrid({ children, className }) {
|
|
444
|
+
const mounted = useMounted2();
|
|
445
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
446
|
+
if (!mounted) {
|
|
447
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, children });
|
|
448
|
+
}
|
|
449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
450
|
+
import_framer_motion3.motion.div,
|
|
451
|
+
{
|
|
452
|
+
className,
|
|
453
|
+
initial: "hidden",
|
|
454
|
+
whileInView: "visible",
|
|
455
|
+
viewport: { once: true, amount: 0.1 },
|
|
456
|
+
variants: {
|
|
457
|
+
hidden: { opacity: 0 },
|
|
458
|
+
visible: {
|
|
459
|
+
opacity: 1,
|
|
460
|
+
transition: {
|
|
461
|
+
staggerChildren: 0.1,
|
|
462
|
+
delayChildren: 0.1
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
children: childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
467
|
+
import_framer_motion3.motion.div,
|
|
468
|
+
{
|
|
469
|
+
variants: {
|
|
470
|
+
hidden: { opacity: 0, y: 30 },
|
|
471
|
+
visible: {
|
|
472
|
+
opacity: 1,
|
|
473
|
+
y: 0,
|
|
474
|
+
transition: {
|
|
475
|
+
duration: 0.6,
|
|
476
|
+
ease: [0.4, 0, 0.2, 1]
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
children: child
|
|
481
|
+
},
|
|
482
|
+
index
|
|
483
|
+
))
|
|
484
|
+
}
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
function AnimatedItem({ children, className, delay = 0, index = 0 }) {
|
|
488
|
+
const mounted = useMounted2();
|
|
489
|
+
if (!mounted) {
|
|
490
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, children });
|
|
491
|
+
}
|
|
492
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
493
|
+
import_framer_motion3.motion.div,
|
|
494
|
+
{
|
|
495
|
+
className,
|
|
496
|
+
initial: { opacity: 0, y: 30 },
|
|
497
|
+
whileInView: { opacity: 1, y: 0 },
|
|
498
|
+
viewport: { once: true, amount: 0.3 },
|
|
499
|
+
transition: {
|
|
500
|
+
duration: 0.6,
|
|
501
|
+
delay: delay || index * 0.1,
|
|
502
|
+
ease: [0.4, 0, 0.2, 1]
|
|
503
|
+
},
|
|
504
|
+
children
|
|
505
|
+
}
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
function ScrollRevealSection({ children, className }) {
|
|
509
|
+
const mounted = useMounted2();
|
|
510
|
+
if (!mounted) {
|
|
511
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("section", { className, children });
|
|
512
|
+
}
|
|
513
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
514
|
+
import_framer_motion3.motion.section,
|
|
515
|
+
{
|
|
516
|
+
className,
|
|
517
|
+
initial: { opacity: 0, y: 40 },
|
|
518
|
+
whileInView: { opacity: 1, y: 0 },
|
|
519
|
+
viewport: { once: true, amount: 0.2 },
|
|
520
|
+
transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] },
|
|
521
|
+
children
|
|
522
|
+
}
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
function AnimatedHeroContent({ children, className }) {
|
|
526
|
+
const mounted = useMounted2();
|
|
527
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
528
|
+
if (!mounted) {
|
|
529
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, children });
|
|
530
|
+
}
|
|
531
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
532
|
+
import_framer_motion3.motion.div,
|
|
533
|
+
{
|
|
534
|
+
className,
|
|
535
|
+
initial: "hidden",
|
|
536
|
+
animate: "visible",
|
|
537
|
+
variants: {
|
|
538
|
+
hidden: { opacity: 0 },
|
|
539
|
+
visible: {
|
|
540
|
+
opacity: 1,
|
|
541
|
+
transition: {
|
|
542
|
+
staggerChildren: 0.15,
|
|
543
|
+
delayChildren: 0.1
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
},
|
|
547
|
+
children: childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
548
|
+
import_framer_motion3.motion.div,
|
|
549
|
+
{
|
|
550
|
+
variants: {
|
|
551
|
+
hidden: { opacity: 0, y: 20 },
|
|
552
|
+
visible: {
|
|
553
|
+
opacity: 1,
|
|
554
|
+
y: 0,
|
|
555
|
+
transition: {
|
|
556
|
+
duration: 0.6,
|
|
557
|
+
ease: [0.4, 0, 0.2, 1]
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
children: child
|
|
562
|
+
},
|
|
563
|
+
index
|
|
564
|
+
))
|
|
565
|
+
}
|
|
566
|
+
);
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
// src/components/AnimatedSections.tsx
|
|
570
|
+
var import_framer_motion4 = require("framer-motion");
|
|
571
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
572
|
+
function AnimatedGrid({ children, className }) {
|
|
573
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
574
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
575
|
+
import_framer_motion4.motion.div,
|
|
576
|
+
{
|
|
577
|
+
className,
|
|
578
|
+
initial: "hidden",
|
|
579
|
+
whileInView: "visible",
|
|
580
|
+
viewport: viewportSettings,
|
|
581
|
+
variants: staggerContainer,
|
|
582
|
+
children: childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_framer_motion4.motion.div, { variants: staggerItem, children: child }, index))
|
|
583
|
+
}
|
|
584
|
+
);
|
|
585
|
+
}
|
|
586
|
+
function AnimatedStats({ children, className }) {
|
|
587
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
588
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
589
|
+
import_framer_motion4.motion.div,
|
|
590
|
+
{
|
|
591
|
+
className,
|
|
592
|
+
initial: "hidden",
|
|
593
|
+
whileInView: "visible",
|
|
594
|
+
viewport: { once: true, amount: 0.3 },
|
|
595
|
+
variants: {
|
|
596
|
+
hidden: { opacity: 0 },
|
|
597
|
+
visible: {
|
|
598
|
+
opacity: 1,
|
|
599
|
+
transition: {
|
|
600
|
+
staggerChildren: 0.15,
|
|
601
|
+
delayChildren: 0.1
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
},
|
|
605
|
+
children: childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
606
|
+
import_framer_motion4.motion.div,
|
|
607
|
+
{
|
|
608
|
+
variants: {
|
|
609
|
+
hidden: { opacity: 0, scale: 0.8 },
|
|
610
|
+
visible: {
|
|
611
|
+
opacity: 1,
|
|
612
|
+
scale: 1,
|
|
613
|
+
transition: {
|
|
614
|
+
duration: 0.5,
|
|
615
|
+
ease: [0.4, 0, 0.2, 1]
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
},
|
|
619
|
+
children: child
|
|
620
|
+
},
|
|
621
|
+
index
|
|
622
|
+
))
|
|
623
|
+
}
|
|
624
|
+
);
|
|
625
|
+
}
|
|
626
|
+
function AnimatedSectionHeader({ children, className }) {
|
|
627
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
628
|
+
import_framer_motion4.motion.header,
|
|
629
|
+
{
|
|
630
|
+
className,
|
|
631
|
+
initial: "hidden",
|
|
632
|
+
whileInView: "visible",
|
|
633
|
+
viewport: viewportSettings,
|
|
634
|
+
variants: fadeInUpShort,
|
|
635
|
+
children
|
|
636
|
+
}
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
function AnimatedList({ children, className }) {
|
|
640
|
+
const childArray = Array.isArray(children) ? children : [children];
|
|
641
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
642
|
+
import_framer_motion4.motion.div,
|
|
643
|
+
{
|
|
644
|
+
className,
|
|
645
|
+
initial: "hidden",
|
|
646
|
+
whileInView: "visible",
|
|
647
|
+
viewport: viewportSettings,
|
|
648
|
+
variants: {
|
|
649
|
+
hidden: { opacity: 0 },
|
|
650
|
+
visible: {
|
|
651
|
+
opacity: 1,
|
|
652
|
+
transition: {
|
|
653
|
+
staggerChildren: 0.08,
|
|
654
|
+
delayChildren: 0.1
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
children: childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
659
|
+
import_framer_motion4.motion.div,
|
|
660
|
+
{
|
|
661
|
+
variants: {
|
|
662
|
+
hidden: { opacity: 0, x: -20 },
|
|
663
|
+
visible: {
|
|
664
|
+
opacity: 1,
|
|
665
|
+
x: 0,
|
|
666
|
+
transition: {
|
|
667
|
+
duration: 0.5,
|
|
668
|
+
ease: [0.4, 0, 0.2, 1]
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
children: child
|
|
673
|
+
},
|
|
674
|
+
index
|
|
675
|
+
))
|
|
676
|
+
}
|
|
677
|
+
);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// src/components/AnimatedHero.tsx
|
|
681
|
+
var import_framer_motion5 = require("framer-motion");
|
|
682
|
+
var import_react3 = require("react");
|
|
82
683
|
var import_image2 = __toESM(require("next/image"));
|
|
83
684
|
var import_link = __toESM(require("next/link"));
|
|
84
685
|
var import_HomePage = __toESM(require("./HomePage.module.css"));
|
|
85
|
-
var
|
|
686
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
86
687
|
function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
87
|
-
const ref = (0,
|
|
88
|
-
const { scrollY } = (0,
|
|
89
|
-
const y = (0,
|
|
90
|
-
return /* @__PURE__ */ (0,
|
|
91
|
-
/* @__PURE__ */ (0,
|
|
92
|
-
|
|
688
|
+
const ref = (0, import_react3.useRef)(null);
|
|
689
|
+
const { scrollY } = (0, import_framer_motion5.useScroll)();
|
|
690
|
+
const y = (0, import_framer_motion5.useTransform)(scrollY, [0, 500], [0, 150]);
|
|
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: [
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
693
|
+
import_framer_motion5.motion.div,
|
|
93
694
|
{
|
|
94
695
|
className: import_HomePage.default.heroContent,
|
|
95
696
|
initial: "hidden",
|
|
96
697
|
animate: "visible",
|
|
97
698
|
variants: fadeInUp,
|
|
98
699
|
children: [
|
|
99
|
-
/* @__PURE__ */ (0,
|
|
100
|
-
|
|
700
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
701
|
+
import_framer_motion5.motion.span,
|
|
101
702
|
{
|
|
102
703
|
className: import_HomePage.default.heroTagline,
|
|
103
704
|
initial: { opacity: 0 },
|
|
@@ -106,8 +707,8 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
106
707
|
children: heroData.tagline
|
|
107
708
|
}
|
|
108
709
|
),
|
|
109
|
-
/* @__PURE__ */ (0,
|
|
110
|
-
|
|
710
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
711
|
+
import_framer_motion5.motion.h1,
|
|
111
712
|
{
|
|
112
713
|
className: import_HomePage.default.heroHeading,
|
|
113
714
|
initial: { opacity: 0, y: 20 },
|
|
@@ -116,12 +717,12 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
116
717
|
children: [
|
|
117
718
|
heroData.heading,
|
|
118
719
|
" ",
|
|
119
|
-
/* @__PURE__ */ (0,
|
|
720
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: import_HomePage.default.heroHeadingAccent, children: heroData.headingAccent })
|
|
120
721
|
]
|
|
121
722
|
}
|
|
122
723
|
),
|
|
123
|
-
/* @__PURE__ */ (0,
|
|
124
|
-
|
|
724
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
725
|
+
import_framer_motion5.motion.p,
|
|
125
726
|
{
|
|
126
727
|
className: import_HomePage.default.heroDescription,
|
|
127
728
|
initial: { opacity: 0, y: 20 },
|
|
@@ -130,27 +731,27 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
130
731
|
children: heroData.description
|
|
131
732
|
}
|
|
132
733
|
),
|
|
133
|
-
/* @__PURE__ */ (0,
|
|
134
|
-
|
|
734
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
735
|
+
import_framer_motion5.motion.div,
|
|
135
736
|
{
|
|
136
737
|
className: import_HomePage.default.heroCtas,
|
|
137
738
|
initial: { opacity: 0, y: 20 },
|
|
138
739
|
animate: { opacity: 1, y: 0 },
|
|
139
740
|
transition: { duration: 0.8, delay: 0.5 },
|
|
140
741
|
children: [
|
|
141
|
-
/* @__PURE__ */ (0,
|
|
742
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_link.default, { href: heroData.ctaLink, className: import_HomePage.default.heroPrimaryCta, children: [
|
|
142
743
|
heroData.ctaText,
|
|
143
|
-
/* @__PURE__ */ (0,
|
|
744
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ArrowRightIcon, {})
|
|
144
745
|
] }),
|
|
145
|
-
/* @__PURE__ */ (0,
|
|
746
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_link.default, { href: "/publications", className: import_HomePage.default.heroSecondaryCta, children: "View Publications" })
|
|
146
747
|
]
|
|
147
748
|
}
|
|
148
749
|
)
|
|
149
750
|
]
|
|
150
751
|
}
|
|
151
752
|
),
|
|
152
|
-
/* @__PURE__ */ (0,
|
|
153
|
-
|
|
753
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
754
|
+
import_framer_motion5.motion.div,
|
|
154
755
|
{
|
|
155
756
|
className: import_HomePage.default.heroImageWrapper,
|
|
156
757
|
style: { y },
|
|
@@ -158,8 +759,8 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
158
759
|
animate: "visible",
|
|
159
760
|
variants: scaleIn,
|
|
160
761
|
transition: { duration: 0.8, delay: 0.6 },
|
|
161
|
-
children: heroData.image ? /* @__PURE__ */ (0,
|
|
162
|
-
/* @__PURE__ */ (0,
|
|
762
|
+
children: heroData.image ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
763
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
163
764
|
import_image2.default,
|
|
164
765
|
{
|
|
165
766
|
src: heroData.image,
|
|
@@ -170,8 +771,8 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
170
771
|
priority: true
|
|
171
772
|
}
|
|
172
773
|
),
|
|
173
|
-
/* @__PURE__ */ (0,
|
|
174
|
-
] }) : /* @__PURE__ */ (0,
|
|
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)(
|
|
175
776
|
"svg",
|
|
176
777
|
{
|
|
177
778
|
width: "120",
|
|
@@ -181,9 +782,9 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
181
782
|
stroke: "currentColor",
|
|
182
783
|
strokeWidth: "1",
|
|
183
784
|
children: [
|
|
184
|
-
/* @__PURE__ */ (0,
|
|
185
|
-
/* @__PURE__ */ (0,
|
|
186
|
-
/* @__PURE__ */ (0,
|
|
785
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }),
|
|
786
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("circle", { cx: "8.5", cy: "8.5", r: "1.5" }),
|
|
787
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M21 15l-5-5L5 21" })
|
|
187
788
|
]
|
|
188
789
|
}
|
|
189
790
|
) })
|
|
@@ -192,15 +793,6 @@ function AnimatedHero({ heroData, ArrowRightIcon }) {
|
|
|
192
793
|
] }) });
|
|
193
794
|
}
|
|
194
795
|
|
|
195
|
-
// src/components/AnimatedPage.tsx
|
|
196
|
-
var import_framer_motion4 = require("framer-motion");
|
|
197
|
-
var import_react3 = require("react");
|
|
198
|
-
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
199
|
-
|
|
200
|
-
// src/components/AnimatedSections.tsx
|
|
201
|
-
var import_framer_motion5 = require("framer-motion");
|
|
202
|
-
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
203
|
-
|
|
204
796
|
// src/components/ClientLayout.tsx
|
|
205
797
|
var import_react6 = require("react");
|
|
206
798
|
var import_next_themes2 = require("next-themes");
|
|
@@ -455,6 +1047,46 @@ function isValidExternalUrl(url) {
|
|
|
455
1047
|
return false;
|
|
456
1048
|
}
|
|
457
1049
|
}
|
|
1050
|
+
function isValidGoogleMapsEmbedUrl(url) {
|
|
1051
|
+
if (!url || typeof url !== "string") return false;
|
|
1052
|
+
try {
|
|
1053
|
+
const parsed = new URL(url);
|
|
1054
|
+
const allowedHosts = [
|
|
1055
|
+
"www.google.com",
|
|
1056
|
+
"google.com",
|
|
1057
|
+
"maps.google.com"
|
|
1058
|
+
];
|
|
1059
|
+
return parsed.protocol === "https:" && allowedHosts.includes(parsed.hostname) && parsed.pathname.startsWith("/maps/embed");
|
|
1060
|
+
} catch {
|
|
1061
|
+
return false;
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
function sanitizeUrl(url) {
|
|
1065
|
+
if (isValidExternalUrl(url)) {
|
|
1066
|
+
return url;
|
|
1067
|
+
}
|
|
1068
|
+
return void 0;
|
|
1069
|
+
}
|
|
1070
|
+
function isValidEmail(email) {
|
|
1071
|
+
if (!email || typeof email !== "string") return false;
|
|
1072
|
+
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1073
|
+
return emailPattern.test(email) && email.length <= 254;
|
|
1074
|
+
}
|
|
1075
|
+
function escapeHtml(text) {
|
|
1076
|
+
const htmlEntities = {
|
|
1077
|
+
"&": "&",
|
|
1078
|
+
"<": "<",
|
|
1079
|
+
">": ">",
|
|
1080
|
+
'"': """,
|
|
1081
|
+
"'": "'"
|
|
1082
|
+
};
|
|
1083
|
+
return text.replace(/[&<>"']/g, (char) => htmlEntities[char]);
|
|
1084
|
+
}
|
|
1085
|
+
function isValidSlug(slug) {
|
|
1086
|
+
if (!slug || typeof slug !== "string") return false;
|
|
1087
|
+
const slugPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
1088
|
+
return slugPattern.test(slug) && slug.length <= 200;
|
|
1089
|
+
}
|
|
458
1090
|
|
|
459
1091
|
// src/components/Footer.tsx
|
|
460
1092
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
@@ -545,12 +1177,120 @@ function ContactCTA() {
|
|
|
545
1177
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_link4.default, { href: "/contact", className: import_ContactCTA.default.ctaButton, children: "Contact Us" })
|
|
546
1178
|
] }) });
|
|
547
1179
|
}
|
|
1180
|
+
|
|
1181
|
+
// src/components/HomePage.tsx
|
|
1182
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1183
|
+
function HomePage({
|
|
1184
|
+
children,
|
|
1185
|
+
settings = null,
|
|
1186
|
+
header,
|
|
1187
|
+
footer
|
|
1188
|
+
}) {
|
|
1189
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
1190
|
+
header ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Header, { settings: settings || {} }),
|
|
1191
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("main", { children }),
|
|
1192
|
+
footer ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Footer, { settings: settings || {} })
|
|
1193
|
+
] });
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
// src/config.ts
|
|
1197
|
+
function defineConfig(config) {
|
|
1198
|
+
return config;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
// src/lib/sanity.ts
|
|
1202
|
+
var import_next_sanity = require("next-sanity");
|
|
1203
|
+
var import_image_url = __toESM(require("@sanity/image-url"));
|
|
1204
|
+
var projectId = process.env.NEXT_PUBLIC_SANITY_PROJECT_ID;
|
|
1205
|
+
var dataset = process.env.NEXT_PUBLIC_SANITY_DATASET || "production";
|
|
1206
|
+
var apiVersion = "2023-05-03";
|
|
1207
|
+
var _client = null;
|
|
1208
|
+
function getClient() {
|
|
1209
|
+
if (!_client) {
|
|
1210
|
+
if (!projectId) {
|
|
1211
|
+
throw new Error(
|
|
1212
|
+
"Sanity Project ID is not defined. Please set NEXT_PUBLIC_SANITY_PROJECT_ID in your environment."
|
|
1213
|
+
);
|
|
1214
|
+
}
|
|
1215
|
+
_client = (0, import_next_sanity.createClient)({
|
|
1216
|
+
projectId,
|
|
1217
|
+
dataset,
|
|
1218
|
+
apiVersion,
|
|
1219
|
+
useCdn: process.env.NODE_ENV === "production"
|
|
1220
|
+
});
|
|
1221
|
+
}
|
|
1222
|
+
return _client;
|
|
1223
|
+
}
|
|
1224
|
+
var client = {
|
|
1225
|
+
get projectId() {
|
|
1226
|
+
return projectId;
|
|
1227
|
+
},
|
|
1228
|
+
get dataset() {
|
|
1229
|
+
return dataset;
|
|
1230
|
+
},
|
|
1231
|
+
fetch: (...args) => getClient().fetch(...args)
|
|
1232
|
+
};
|
|
1233
|
+
var _builder = null;
|
|
1234
|
+
function urlFor(source) {
|
|
1235
|
+
if (!_builder) {
|
|
1236
|
+
if (!projectId) {
|
|
1237
|
+
return {
|
|
1238
|
+
width: () => ({ height: () => ({ url: () => "" }), url: () => "" }),
|
|
1239
|
+
height: () => ({ width: () => ({ url: () => "" }), url: () => "" }),
|
|
1240
|
+
url: () => ""
|
|
1241
|
+
};
|
|
1242
|
+
}
|
|
1243
|
+
_builder = (0, import_image_url.default)({ projectId, dataset });
|
|
1244
|
+
}
|
|
1245
|
+
return _builder.image(source);
|
|
1246
|
+
}
|
|
548
1247
|
// Annotate the CommonJS export names for ESM import in node:
|
|
549
1248
|
0 && (module.exports = {
|
|
1249
|
+
AnimatedCard,
|
|
1250
|
+
AnimatedGalleryGrid,
|
|
1251
|
+
AnimatedGalleryHeader,
|
|
1252
|
+
AnimatedGrid,
|
|
1253
|
+
AnimatedHeader,
|
|
550
1254
|
AnimatedHero,
|
|
1255
|
+
AnimatedHeroContent,
|
|
1256
|
+
AnimatedImage,
|
|
1257
|
+
AnimatedItem,
|
|
1258
|
+
AnimatedList,
|
|
1259
|
+
AnimatedMain,
|
|
1260
|
+
AnimatedPage,
|
|
1261
|
+
AnimatedSection,
|
|
1262
|
+
AnimatedSectionHeader,
|
|
1263
|
+
AnimatedStats,
|
|
551
1264
|
ClientLayout,
|
|
552
1265
|
ContactCTA,
|
|
553
1266
|
Footer,
|
|
554
1267
|
Header,
|
|
555
|
-
|
|
1268
|
+
HomePage,
|
|
1269
|
+
ScrollRevealSection,
|
|
1270
|
+
StaggeredGrid,
|
|
1271
|
+
ThemeToggle,
|
|
1272
|
+
cardHover,
|
|
1273
|
+
client,
|
|
1274
|
+
defineConfig,
|
|
1275
|
+
escapeHtml,
|
|
1276
|
+
fadeIn,
|
|
1277
|
+
fadeInUp,
|
|
1278
|
+
fadeInUpShort,
|
|
1279
|
+
getClient,
|
|
1280
|
+
imageZoom,
|
|
1281
|
+
isValidEmail,
|
|
1282
|
+
isValidExternalUrl,
|
|
1283
|
+
isValidGoogleMapsEmbedUrl,
|
|
1284
|
+
isValidSlug,
|
|
1285
|
+
pageTransition,
|
|
1286
|
+
reducedMotion,
|
|
1287
|
+
sanitizeUrl,
|
|
1288
|
+
scaleIn,
|
|
1289
|
+
scrollReveal,
|
|
1290
|
+
slideInLeft,
|
|
1291
|
+
slideInRight,
|
|
1292
|
+
staggerContainer,
|
|
1293
|
+
staggerItem,
|
|
1294
|
+
urlFor,
|
|
1295
|
+
viewportSettings
|
|
556
1296
|
});
|