@prosophia/personal-cv 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/About.module.css +107 -0
- package/dist/CVSection.module.css +124 -0
- package/dist/Footer.module.css +41 -0
- package/dist/Header.module.css +226 -0
- package/dist/Projects.module.css +114 -0
- package/dist/Publications.module.css +118 -0
- package/dist/index-CZBtPfWB.d.mts +75 -0
- package/dist/index-CZBtPfWB.d.ts +75 -0
- package/dist/index.d.mts +174 -0
- package/dist/index.d.ts +174 -0
- package/dist/index.js +325 -64
- package/dist/index.mjs +306 -58
- package/dist/layouts/index.d.mts +14 -0
- package/dist/layouts/index.d.ts +14 -0
- package/dist/layouts/index.js +72 -0
- package/dist/layouts/index.mjs +46 -0
- package/dist/schemas/index.d.mts +144 -0
- package/dist/schemas/index.d.ts +144 -0
- package/dist/schemas/index.js +581 -0
- package/dist/schemas/index.mjs +540 -0
- package/package.json +13 -2
package/dist/index.js
CHANGED
|
@@ -34,13 +34,26 @@ __export(index_exports, {
|
|
|
34
34
|
CVSection: () => CVSection,
|
|
35
35
|
Footer: () => Footer,
|
|
36
36
|
Header: () => Header,
|
|
37
|
+
HomePage: () => HomePage,
|
|
37
38
|
Projects: () => Projects,
|
|
38
|
-
Publications: () => Publications
|
|
39
|
+
Publications: () => Publications,
|
|
40
|
+
ThemeProvider: () => ThemeProvider,
|
|
41
|
+
defineConfig: () => defineConfig,
|
|
42
|
+
getAbout: () => getAbout,
|
|
43
|
+
getAllPageData: () => getAllPageData,
|
|
44
|
+
getAllProjectSlugs: () => getAllProjectSlugs,
|
|
45
|
+
getCVSection: () => getCVSection,
|
|
46
|
+
getNavigation: () => getNavigation,
|
|
47
|
+
getProjectBySlug: () => getProjectBySlug,
|
|
48
|
+
getProjects: () => getProjects,
|
|
49
|
+
getPublications: () => getPublications,
|
|
50
|
+
getSiteSettings: () => getSiteSettings,
|
|
51
|
+
useTheme: () => useTheme
|
|
39
52
|
});
|
|
40
53
|
module.exports = __toCommonJS(index_exports);
|
|
41
54
|
|
|
42
55
|
// src/components/About.tsx
|
|
43
|
-
var import_About = __toESM(require("
|
|
56
|
+
var import_About = __toESM(require("./About.module.css"));
|
|
44
57
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
45
58
|
var socialIcons = {
|
|
46
59
|
scholar: "school",
|
|
@@ -101,7 +114,7 @@ function About({
|
|
|
101
114
|
}
|
|
102
115
|
|
|
103
116
|
// src/components/CVSection.tsx
|
|
104
|
-
var import_CVSection = __toESM(require("
|
|
117
|
+
var import_CVSection = __toESM(require("./CVSection.module.css"));
|
|
105
118
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
106
119
|
function CVSection({
|
|
107
120
|
heading,
|
|
@@ -138,7 +151,7 @@ function CVSection({
|
|
|
138
151
|
}
|
|
139
152
|
|
|
140
153
|
// src/components/Footer.tsx
|
|
141
|
-
var import_Footer = __toESM(require("
|
|
154
|
+
var import_Footer = __toESM(require("./Footer.module.css"));
|
|
142
155
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
143
156
|
function Footer({ footerText, email }) {
|
|
144
157
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("footer", { className: import_Footer.default.footer, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: import_Footer.default.content, children: [
|
|
@@ -151,11 +164,49 @@ function Footer({ footerText, email }) {
|
|
|
151
164
|
}
|
|
152
165
|
|
|
153
166
|
// src/components/Header.tsx
|
|
154
|
-
var
|
|
167
|
+
var import_react2 = require("react");
|
|
155
168
|
var import_link = __toESM(require("next/link"));
|
|
156
|
-
var import_Header = __toESM(require("
|
|
157
|
-
|
|
169
|
+
var import_Header = __toESM(require("./Header.module.css"));
|
|
170
|
+
|
|
171
|
+
// src/context/ThemeContext.tsx
|
|
172
|
+
var import_react = require("react");
|
|
158
173
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
174
|
+
var ThemeContext = (0, import_react.createContext)({
|
|
175
|
+
theme: "light",
|
|
176
|
+
toggleTheme: () => {
|
|
177
|
+
},
|
|
178
|
+
mounted: false
|
|
179
|
+
});
|
|
180
|
+
function ThemeProvider({ children }) {
|
|
181
|
+
const [theme, setTheme] = (0, import_react.useState)("light");
|
|
182
|
+
const [mounted, setMounted] = (0, import_react.useState)(false);
|
|
183
|
+
(0, import_react.useEffect)(() => {
|
|
184
|
+
setMounted(true);
|
|
185
|
+
const savedTheme = localStorage.getItem("theme");
|
|
186
|
+
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
187
|
+
if (savedTheme) {
|
|
188
|
+
setTheme(savedTheme);
|
|
189
|
+
} else if (prefersDark) {
|
|
190
|
+
setTheme("dark");
|
|
191
|
+
}
|
|
192
|
+
}, []);
|
|
193
|
+
(0, import_react.useEffect)(() => {
|
|
194
|
+
if (mounted) {
|
|
195
|
+
document.documentElement.setAttribute("data-theme", theme);
|
|
196
|
+
localStorage.setItem("theme", theme);
|
|
197
|
+
}
|
|
198
|
+
}, [theme, mounted]);
|
|
199
|
+
const toggleTheme = () => {
|
|
200
|
+
setTheme((prev) => prev === "light" ? "dark" : "light");
|
|
201
|
+
};
|
|
202
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThemeContext.Provider, { value: { theme, toggleTheme, mounted }, children });
|
|
203
|
+
}
|
|
204
|
+
function useTheme() {
|
|
205
|
+
return (0, import_react.useContext)(ThemeContext);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// src/components/Header.tsx
|
|
209
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
159
210
|
function Header({
|
|
160
211
|
siteName,
|
|
161
212
|
navLinks,
|
|
@@ -163,22 +214,22 @@ function Header({
|
|
|
163
214
|
contactButtonText = "Contact",
|
|
164
215
|
contactEmail = ""
|
|
165
216
|
}) {
|
|
166
|
-
const [mobileMenuOpen, setMobileMenuOpen] = (0,
|
|
167
|
-
const { theme, toggleTheme, mounted } =
|
|
217
|
+
const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react2.useState)(false);
|
|
218
|
+
const { theme, toggleTheme, mounted } = useTheme();
|
|
168
219
|
const toggleMobileMenu = () => {
|
|
169
220
|
setMobileMenuOpen(!mobileMenuOpen);
|
|
170
221
|
};
|
|
171
222
|
const closeMobileMenu = () => {
|
|
172
223
|
setMobileMenuOpen(false);
|
|
173
224
|
};
|
|
174
|
-
return /* @__PURE__ */ (0,
|
|
175
|
-
/* @__PURE__ */ (0,
|
|
176
|
-
/* @__PURE__ */ (0,
|
|
177
|
-
/* @__PURE__ */ (0,
|
|
178
|
-
/* @__PURE__ */ (0,
|
|
225
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
226
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("header", { className: import_Header.default.header, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: import_Header.default.headerInner, children: [
|
|
227
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_link.default, { href: "/", className: import_Header.default.logo, children: [
|
|
228
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: import_Header.default.logoIcon, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "material-symbols-outlined", children: "hexagon" }) }),
|
|
229
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: import_Header.default.siteName, children: siteName })
|
|
179
230
|
] }),
|
|
180
|
-
/* @__PURE__ */ (0,
|
|
181
|
-
/* @__PURE__ */ (0,
|
|
231
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: import_Header.default.desktopNav, children: [
|
|
232
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: import_Header.default.navLinks, children: navLinks.map((link) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
182
233
|
import_link.default,
|
|
183
234
|
{
|
|
184
235
|
href: link.href,
|
|
@@ -187,47 +238,47 @@ function Header({
|
|
|
187
238
|
},
|
|
188
239
|
link.href
|
|
189
240
|
)) }),
|
|
190
|
-
mounted && /* @__PURE__ */ (0,
|
|
241
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
191
242
|
"button",
|
|
192
243
|
{
|
|
193
244
|
className: import_Header.default.themeToggle,
|
|
194
245
|
onClick: toggleTheme,
|
|
195
246
|
"aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
|
|
196
|
-
children: /* @__PURE__ */ (0,
|
|
247
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
|
|
197
248
|
}
|
|
198
249
|
),
|
|
199
|
-
showContactButton && contactEmail && /* @__PURE__ */ (0,
|
|
250
|
+
showContactButton && contactEmail && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
200
251
|
"a",
|
|
201
252
|
{
|
|
202
253
|
href: `mailto:${contactEmail}`,
|
|
203
254
|
className: import_Header.default.contactBtn,
|
|
204
|
-
children: /* @__PURE__ */ (0,
|
|
255
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: contactButtonText })
|
|
205
256
|
}
|
|
206
257
|
)
|
|
207
258
|
] }),
|
|
208
|
-
/* @__PURE__ */ (0,
|
|
209
|
-
mounted && /* @__PURE__ */ (0,
|
|
259
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: import_Header.default.mobileActions, children: [
|
|
260
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
210
261
|
"button",
|
|
211
262
|
{
|
|
212
263
|
className: import_Header.default.mobileThemeToggle,
|
|
213
264
|
onClick: toggleTheme,
|
|
214
265
|
"aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
|
|
215
|
-
children: /* @__PURE__ */ (0,
|
|
266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
|
|
216
267
|
}
|
|
217
268
|
),
|
|
218
|
-
/* @__PURE__ */ (0,
|
|
269
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
219
270
|
"button",
|
|
220
271
|
{
|
|
221
272
|
className: import_Header.default.mobileMenuBtn,
|
|
222
273
|
onClick: toggleMobileMenu,
|
|
223
274
|
"aria-label": "Toggle menu",
|
|
224
|
-
children: /* @__PURE__ */ (0,
|
|
275
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "material-symbols-outlined", children: mobileMenuOpen ? "close" : "menu" })
|
|
225
276
|
}
|
|
226
277
|
)
|
|
227
278
|
] })
|
|
228
279
|
] }) }),
|
|
229
|
-
/* @__PURE__ */ (0,
|
|
230
|
-
/* @__PURE__ */ (0,
|
|
280
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: `${import_Header.default.mobileMenu} ${mobileMenuOpen ? import_Header.default.open : ""}`, children: [
|
|
281
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: import_Header.default.mobileNavLinks, children: navLinks.map((link) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
231
282
|
import_link.default,
|
|
232
283
|
{
|
|
233
284
|
href: link.href,
|
|
@@ -237,7 +288,7 @@ function Header({
|
|
|
237
288
|
},
|
|
238
289
|
link.href
|
|
239
290
|
)) }),
|
|
240
|
-
showContactButton && contactEmail && /* @__PURE__ */ (0,
|
|
291
|
+
showContactButton && contactEmail && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
241
292
|
"a",
|
|
242
293
|
{
|
|
243
294
|
href: `mailto:${contactEmail}`,
|
|
@@ -249,24 +300,63 @@ function Header({
|
|
|
249
300
|
] });
|
|
250
301
|
}
|
|
251
302
|
|
|
303
|
+
// src/components/HomePage.tsx
|
|
304
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
305
|
+
var defaultNavLinks = [
|
|
306
|
+
{ label: "About", href: "#about" },
|
|
307
|
+
{ label: "Experience", href: "#experience" },
|
|
308
|
+
{ label: "Projects", href: "#projects" },
|
|
309
|
+
{ label: "Publications", href: "#publications" }
|
|
310
|
+
];
|
|
311
|
+
function HomePage({
|
|
312
|
+
children,
|
|
313
|
+
settings = null,
|
|
314
|
+
header,
|
|
315
|
+
footer
|
|
316
|
+
}) {
|
|
317
|
+
const siteName = settings?.siteName || "My CV";
|
|
318
|
+
const navLinks = settings?.navLinks?.length ? settings.navLinks : defaultNavLinks;
|
|
319
|
+
const footerText = settings?.footerText || `\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} All rights reserved.`;
|
|
320
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
321
|
+
header ?? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
322
|
+
Header,
|
|
323
|
+
{
|
|
324
|
+
siteName,
|
|
325
|
+
navLinks,
|
|
326
|
+
showContactButton: settings?.showContactButton,
|
|
327
|
+
contactButtonText: settings?.contactButtonText,
|
|
328
|
+
contactEmail: settings?.contactEmail
|
|
329
|
+
}
|
|
330
|
+
),
|
|
331
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("main", { children }),
|
|
332
|
+
footer ?? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
333
|
+
Footer,
|
|
334
|
+
{
|
|
335
|
+
footerText,
|
|
336
|
+
email: settings?.contactEmail
|
|
337
|
+
}
|
|
338
|
+
)
|
|
339
|
+
] });
|
|
340
|
+
}
|
|
341
|
+
|
|
252
342
|
// src/components/Projects.tsx
|
|
253
343
|
var import_link2 = __toESM(require("next/link"));
|
|
254
|
-
var import_Projects = __toESM(require("
|
|
255
|
-
var
|
|
344
|
+
var import_Projects = __toESM(require("./Projects.module.css"));
|
|
345
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
256
346
|
function Projects({
|
|
257
347
|
projects,
|
|
258
348
|
showViewAll = true,
|
|
259
349
|
viewAllUrl = "#"
|
|
260
350
|
}) {
|
|
261
|
-
return /* @__PURE__ */ (0,
|
|
262
|
-
/* @__PURE__ */ (0,
|
|
263
|
-
/* @__PURE__ */ (0,
|
|
264
|
-
showViewAll && /* @__PURE__ */ (0,
|
|
351
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("section", { className: import_Projects.default.projects, id: "projects", children: [
|
|
352
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: import_Projects.default.header, children: [
|
|
353
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h2", { className: import_Projects.default.title, children: "Selected Projects" }),
|
|
354
|
+
showViewAll && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_link2.default, { href: viewAllUrl, className: import_Projects.default.viewAllLink, children: "View all projects" })
|
|
265
355
|
] }),
|
|
266
|
-
/* @__PURE__ */ (0,
|
|
356
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: import_Projects.default.grid, children: projects.map((project) => {
|
|
267
357
|
const projectUrl = project.slug?.current ? `/projects/${project.slug.current}` : project.caseStudyUrl;
|
|
268
|
-
const CardContent = /* @__PURE__ */ (0,
|
|
269
|
-
/* @__PURE__ */ (0,
|
|
358
|
+
const CardContent = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
359
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: import_Projects.default.imageWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
270
360
|
"div",
|
|
271
361
|
{
|
|
272
362
|
className: import_Projects.default.image,
|
|
@@ -278,17 +368,17 @@ function Projects({
|
|
|
278
368
|
"aria-label": project.imageAlt || project.title
|
|
279
369
|
}
|
|
280
370
|
) }),
|
|
281
|
-
/* @__PURE__ */ (0,
|
|
282
|
-
/* @__PURE__ */ (0,
|
|
283
|
-
/* @__PURE__ */ (0,
|
|
284
|
-
/* @__PURE__ */ (0,
|
|
371
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: import_Projects.default.content, children: [
|
|
372
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: import_Projects.default.projectTitle, children: project.title }),
|
|
373
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: import_Projects.default.description, children: project.description }),
|
|
374
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: import_Projects.default.caseStudyLink, children: [
|
|
285
375
|
"View Project",
|
|
286
376
|
" ",
|
|
287
|
-
/* @__PURE__ */ (0,
|
|
377
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "material-symbols-outlined", children: "arrow_forward" })
|
|
288
378
|
] })
|
|
289
379
|
] })
|
|
290
380
|
] });
|
|
291
|
-
return project.slug?.current ? /* @__PURE__ */ (0,
|
|
381
|
+
return project.slug?.current ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
292
382
|
import_link2.default,
|
|
293
383
|
{
|
|
294
384
|
href: projectUrl,
|
|
@@ -296,26 +386,26 @@ function Projects({
|
|
|
296
386
|
children: CardContent
|
|
297
387
|
},
|
|
298
388
|
project._id
|
|
299
|
-
) : /* @__PURE__ */ (0,
|
|
389
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: import_Projects.default.card, children: CardContent }, project._id);
|
|
300
390
|
}) })
|
|
301
391
|
] });
|
|
302
392
|
}
|
|
303
393
|
|
|
304
394
|
// src/components/Publications.tsx
|
|
305
|
-
var import_Publications = __toESM(require("
|
|
306
|
-
var
|
|
395
|
+
var import_Publications = __toESM(require("./Publications.module.css"));
|
|
396
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
307
397
|
function Publications({ publications }) {
|
|
308
|
-
return /* @__PURE__ */ (0,
|
|
309
|
-
/* @__PURE__ */ (0,
|
|
310
|
-
/* @__PURE__ */ (0,
|
|
311
|
-
/* @__PURE__ */ (0,
|
|
312
|
-
/* @__PURE__ */ (0,
|
|
313
|
-
/* @__PURE__ */ (0,
|
|
398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: import_Publications.default.publications, id: "publications", children: [
|
|
399
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: import_Publications.default.header, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { className: import_Publications.default.title, children: "Recent Publications" }) }),
|
|
400
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: import_Publications.default.list, children: publications.map((pub) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Publications.default.item, children: [
|
|
401
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Publications.default.itemHeader, children: [
|
|
402
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: import_Publications.default.pubTitle, children: pub.title }),
|
|
403
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: import_Publications.default.year, children: pub.year })
|
|
314
404
|
] }),
|
|
315
|
-
/* @__PURE__ */ (0,
|
|
316
|
-
/* @__PURE__ */ (0,
|
|
317
|
-
/* @__PURE__ */ (0,
|
|
318
|
-
pub.pdfUrl && /* @__PURE__ */ (0,
|
|
405
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: import_Publications.default.authors, children: pub.authors }),
|
|
406
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: import_Publications.default.venue, children: pub.venue }),
|
|
407
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: import_Publications.default.links, children: [
|
|
408
|
+
pub.pdfUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
319
409
|
"a",
|
|
320
410
|
{
|
|
321
411
|
href: pub.pdfUrl,
|
|
@@ -323,12 +413,12 @@ function Publications({ publications }) {
|
|
|
323
413
|
rel: "noopener noreferrer",
|
|
324
414
|
className: import_Publications.default.linkBtn,
|
|
325
415
|
children: [
|
|
326
|
-
/* @__PURE__ */ (0,
|
|
416
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined", children: "description" }),
|
|
327
417
|
"PDF"
|
|
328
418
|
]
|
|
329
419
|
}
|
|
330
420
|
),
|
|
331
|
-
pub.codeUrl && /* @__PURE__ */ (0,
|
|
421
|
+
pub.codeUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
332
422
|
"a",
|
|
333
423
|
{
|
|
334
424
|
href: pub.codeUrl,
|
|
@@ -336,12 +426,12 @@ function Publications({ publications }) {
|
|
|
336
426
|
rel: "noopener noreferrer",
|
|
337
427
|
className: import_Publications.default.linkBtn,
|
|
338
428
|
children: [
|
|
339
|
-
/* @__PURE__ */ (0,
|
|
429
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined", children: "code" }),
|
|
340
430
|
"Code"
|
|
341
431
|
]
|
|
342
432
|
}
|
|
343
433
|
),
|
|
344
|
-
pub.videoUrl && /* @__PURE__ */ (0,
|
|
434
|
+
pub.videoUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
345
435
|
"a",
|
|
346
436
|
{
|
|
347
437
|
href: pub.videoUrl,
|
|
@@ -349,12 +439,12 @@ function Publications({ publications }) {
|
|
|
349
439
|
rel: "noopener noreferrer",
|
|
350
440
|
className: import_Publications.default.linkBtn,
|
|
351
441
|
children: [
|
|
352
|
-
/* @__PURE__ */ (0,
|
|
442
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined", children: "videocam" }),
|
|
353
443
|
"Video"
|
|
354
444
|
]
|
|
355
445
|
}
|
|
356
446
|
),
|
|
357
|
-
pub.bibtex && /* @__PURE__ */ (0,
|
|
447
|
+
pub.bibtex && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
358
448
|
"button",
|
|
359
449
|
{
|
|
360
450
|
onClick: () => {
|
|
@@ -363,7 +453,7 @@ function Publications({ publications }) {
|
|
|
363
453
|
},
|
|
364
454
|
className: import_Publications.default.linkBtn,
|
|
365
455
|
children: [
|
|
366
|
-
/* @__PURE__ */ (0,
|
|
456
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "material-symbols-outlined", children: "format_quote" }),
|
|
367
457
|
"BibTeX"
|
|
368
458
|
]
|
|
369
459
|
}
|
|
@@ -372,12 +462,183 @@ function Publications({ publications }) {
|
|
|
372
462
|
] }, pub._id)) })
|
|
373
463
|
] });
|
|
374
464
|
}
|
|
465
|
+
|
|
466
|
+
// src/config.ts
|
|
467
|
+
function defineConfig(config) {
|
|
468
|
+
return config;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// src/schemas/client.ts
|
|
472
|
+
var import_next_sanity = require("next-sanity");
|
|
473
|
+
|
|
474
|
+
// src/schemas/env.ts
|
|
475
|
+
var apiVersion = process.env.NEXT_PUBLIC_SANITY_API_VERSION || "2024-01-01";
|
|
476
|
+
var dataset = process.env.NEXT_PUBLIC_SANITY_DATASET || "production";
|
|
477
|
+
var projectId = process.env.NEXT_PUBLIC_SANITY_PROJECT_ID || "";
|
|
478
|
+
var useCdn = false;
|
|
479
|
+
|
|
480
|
+
// src/schemas/client.ts
|
|
481
|
+
var client = projectId ? (0, import_next_sanity.createClient)({
|
|
482
|
+
projectId,
|
|
483
|
+
dataset,
|
|
484
|
+
apiVersion,
|
|
485
|
+
useCdn
|
|
486
|
+
}) : null;
|
|
487
|
+
|
|
488
|
+
// src/schemas/queries.ts
|
|
489
|
+
var import_next_sanity2 = require("next-sanity");
|
|
490
|
+
var siteSettingsQuery = import_next_sanity2.groq`
|
|
491
|
+
*[_type == "siteSettings"][0] {
|
|
492
|
+
siteName,
|
|
493
|
+
siteTitle,
|
|
494
|
+
primaryColor,
|
|
495
|
+
backgroundColor,
|
|
496
|
+
textColor,
|
|
497
|
+
secondaryTextColor,
|
|
498
|
+
contactEmail,
|
|
499
|
+
footerText
|
|
500
|
+
}
|
|
501
|
+
`;
|
|
502
|
+
var navigationQuery = import_next_sanity2.groq`
|
|
503
|
+
*[_type == "navigation"][0] {
|
|
504
|
+
links[] {
|
|
505
|
+
label,
|
|
506
|
+
href
|
|
507
|
+
},
|
|
508
|
+
showContactButton,
|
|
509
|
+
contactButtonText
|
|
510
|
+
}
|
|
511
|
+
`;
|
|
512
|
+
var aboutQuery = import_next_sanity2.groq`
|
|
513
|
+
*[_type == "about"][0] {
|
|
514
|
+
name,
|
|
515
|
+
greeting,
|
|
516
|
+
title,
|
|
517
|
+
bio,
|
|
518
|
+
"profileImageUrl": profileImage.asset->url,
|
|
519
|
+
socialLinks[] {
|
|
520
|
+
platform,
|
|
521
|
+
url
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
`;
|
|
525
|
+
var projectsQuery = import_next_sanity2.groq`
|
|
526
|
+
*[_type == "project" && featured == true] | order(order asc) {
|
|
527
|
+
_id,
|
|
528
|
+
title,
|
|
529
|
+
description,
|
|
530
|
+
"imageUrl": image.asset->url,
|
|
531
|
+
imageAlt,
|
|
532
|
+
caseStudyUrl,
|
|
533
|
+
slug
|
|
534
|
+
}
|
|
535
|
+
`;
|
|
536
|
+
var publicationsQuery = import_next_sanity2.groq`
|
|
537
|
+
*[_type == "publication"] | order(year desc, order asc) {
|
|
538
|
+
_id,
|
|
539
|
+
title,
|
|
540
|
+
authors,
|
|
541
|
+
venue,
|
|
542
|
+
year,
|
|
543
|
+
pdfUrl,
|
|
544
|
+
codeUrl,
|
|
545
|
+
videoUrl,
|
|
546
|
+
bibtex
|
|
547
|
+
}
|
|
548
|
+
`;
|
|
549
|
+
var cvSectionQuery = import_next_sanity2.groq`
|
|
550
|
+
*[_type == "cvSection"][0] {
|
|
551
|
+
heading,
|
|
552
|
+
description,
|
|
553
|
+
buttonText,
|
|
554
|
+
"cvFileUrl": cvFile.asset->url
|
|
555
|
+
}
|
|
556
|
+
`;
|
|
557
|
+
var projectBySlugQuery = import_next_sanity2.groq`
|
|
558
|
+
*[_type == "project" && slug.current == $slug][0] {
|
|
559
|
+
_id,
|
|
560
|
+
title,
|
|
561
|
+
description,
|
|
562
|
+
"imageUrl": image.asset->url,
|
|
563
|
+
imageAlt,
|
|
564
|
+
caseStudyUrl,
|
|
565
|
+
slug
|
|
566
|
+
}
|
|
567
|
+
`;
|
|
568
|
+
var allProjectSlugsQuery = import_next_sanity2.groq`
|
|
569
|
+
*[_type == "project" && defined(slug.current)][].slug.current
|
|
570
|
+
`;
|
|
571
|
+
|
|
572
|
+
// src/lib/sanity.ts
|
|
573
|
+
async function getSiteSettings() {
|
|
574
|
+
if (!client) return null;
|
|
575
|
+
return client.fetch(siteSettingsQuery);
|
|
576
|
+
}
|
|
577
|
+
async function getNavigation() {
|
|
578
|
+
if (!client) return null;
|
|
579
|
+
return client.fetch(navigationQuery);
|
|
580
|
+
}
|
|
581
|
+
async function getAbout() {
|
|
582
|
+
if (!client) return null;
|
|
583
|
+
return client.fetch(aboutQuery);
|
|
584
|
+
}
|
|
585
|
+
async function getProjects() {
|
|
586
|
+
if (!client) return [];
|
|
587
|
+
return client.fetch(projectsQuery);
|
|
588
|
+
}
|
|
589
|
+
async function getPublications() {
|
|
590
|
+
if (!client) return [];
|
|
591
|
+
return client.fetch(publicationsQuery);
|
|
592
|
+
}
|
|
593
|
+
async function getCVSection() {
|
|
594
|
+
if (!client) return null;
|
|
595
|
+
return client.fetch(cvSectionQuery);
|
|
596
|
+
}
|
|
597
|
+
async function getAllPageData() {
|
|
598
|
+
const [siteSettings, navigation, about, projects, publications, cvSection] = await Promise.all([
|
|
599
|
+
getSiteSettings(),
|
|
600
|
+
getNavigation(),
|
|
601
|
+
getAbout(),
|
|
602
|
+
getProjects(),
|
|
603
|
+
getPublications(),
|
|
604
|
+
getCVSection()
|
|
605
|
+
]);
|
|
606
|
+
return {
|
|
607
|
+
siteSettings,
|
|
608
|
+
navigation,
|
|
609
|
+
about,
|
|
610
|
+
projects,
|
|
611
|
+
publications,
|
|
612
|
+
cvSection
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
async function getProjectBySlug(slug) {
|
|
616
|
+
if (!client) return null;
|
|
617
|
+
return client.fetch(projectBySlugQuery, { slug });
|
|
618
|
+
}
|
|
619
|
+
async function getAllProjectSlugs() {
|
|
620
|
+
if (!client) return [];
|
|
621
|
+
return client.fetch(allProjectSlugsQuery);
|
|
622
|
+
}
|
|
375
623
|
// Annotate the CommonJS export names for ESM import in node:
|
|
376
624
|
0 && (module.exports = {
|
|
377
625
|
About,
|
|
378
626
|
CVSection,
|
|
379
627
|
Footer,
|
|
380
628
|
Header,
|
|
629
|
+
HomePage,
|
|
381
630
|
Projects,
|
|
382
|
-
Publications
|
|
631
|
+
Publications,
|
|
632
|
+
ThemeProvider,
|
|
633
|
+
defineConfig,
|
|
634
|
+
getAbout,
|
|
635
|
+
getAllPageData,
|
|
636
|
+
getAllProjectSlugs,
|
|
637
|
+
getCVSection,
|
|
638
|
+
getNavigation,
|
|
639
|
+
getProjectBySlug,
|
|
640
|
+
getProjects,
|
|
641
|
+
getPublications,
|
|
642
|
+
getSiteSettings,
|
|
643
|
+
useTheme
|
|
383
644
|
});
|