@prosophia/personal-cv 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.
- 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.css +648 -0
- package/dist/index.d.mts +150 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.js +333 -99
- package/dist/index.mjs +314 -92
- 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.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
// src/styles/About.module.css
|
|
2
|
+
var About_default = {};
|
|
3
|
+
|
|
1
4
|
// src/components/About.tsx
|
|
2
|
-
import styles from "@/styles/About.module.css";
|
|
3
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
6
|
var socialIcons = {
|
|
5
7
|
scholar: "school",
|
|
@@ -24,11 +26,11 @@ function About({
|
|
|
24
26
|
profileImageUrl,
|
|
25
27
|
socialLinks = []
|
|
26
28
|
}) {
|
|
27
|
-
return /* @__PURE__ */ jsx("section", { className:
|
|
28
|
-
/* @__PURE__ */ jsx("div", { className:
|
|
29
|
+
return /* @__PURE__ */ jsx("section", { className: About_default.about, id: "about", children: /* @__PURE__ */ jsxs("div", { className: About_default.card, children: [
|
|
30
|
+
/* @__PURE__ */ jsx("div", { className: About_default.imageWrapper, children: /* @__PURE__ */ jsx(
|
|
29
31
|
"div",
|
|
30
32
|
{
|
|
31
|
-
className:
|
|
33
|
+
className: About_default.profileImage,
|
|
32
34
|
style: {
|
|
33
35
|
backgroundImage: profileImageUrl ? `url("${profileImageUrl}")` : void 0,
|
|
34
36
|
backgroundColor: profileImageUrl ? void 0 : "#e5e7eb"
|
|
@@ -37,19 +39,19 @@ function About({
|
|
|
37
39
|
"aria-label": "Profile photo"
|
|
38
40
|
}
|
|
39
41
|
) }),
|
|
40
|
-
/* @__PURE__ */ jsxs("div", { className:
|
|
42
|
+
/* @__PURE__ */ jsxs("div", { className: About_default.content, children: [
|
|
41
43
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
42
|
-
/* @__PURE__ */ jsx("h1", { className:
|
|
43
|
-
/* @__PURE__ */ jsx("p", { className:
|
|
44
|
-
/* @__PURE__ */ jsx("p", { className:
|
|
44
|
+
/* @__PURE__ */ jsx("h1", { className: About_default.greeting, children: greeting }),
|
|
45
|
+
/* @__PURE__ */ jsx("p", { className: About_default.title, children: title }),
|
|
46
|
+
/* @__PURE__ */ jsx("p", { className: About_default.bio, children: bio })
|
|
45
47
|
] }),
|
|
46
|
-
socialLinks.length > 0 && /* @__PURE__ */ jsx("div", { className:
|
|
48
|
+
socialLinks.length > 0 && /* @__PURE__ */ jsx("div", { className: About_default.socialLinks, children: socialLinks.map((link) => /* @__PURE__ */ jsx(
|
|
47
49
|
"a",
|
|
48
50
|
{
|
|
49
51
|
href: link.url,
|
|
50
52
|
target: "_blank",
|
|
51
53
|
rel: "noopener noreferrer",
|
|
52
|
-
className:
|
|
54
|
+
className: About_default.socialLink,
|
|
53
55
|
"aria-label": socialLabels[link.platform] || link.platform,
|
|
54
56
|
children: /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined", children: socialIcons[link.platform] || "link" })
|
|
55
57
|
},
|
|
@@ -59,8 +61,10 @@ function About({
|
|
|
59
61
|
] }) });
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
// src/styles/CVSection.module.css
|
|
65
|
+
var CVSection_default = {};
|
|
66
|
+
|
|
62
67
|
// src/components/CVSection.tsx
|
|
63
|
-
import styles2 from "@/styles/CVSection.module.css";
|
|
64
68
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
65
69
|
function CVSection({
|
|
66
70
|
heading,
|
|
@@ -68,12 +72,12 @@ function CVSection({
|
|
|
68
72
|
buttonText,
|
|
69
73
|
cvFileUrl
|
|
70
74
|
}) {
|
|
71
|
-
return /* @__PURE__ */ jsx2("section", { className:
|
|
72
|
-
/* @__PURE__ */ jsxs2("div", { className:
|
|
73
|
-
/* @__PURE__ */ jsx2("span", { className:
|
|
74
|
-
/* @__PURE__ */ jsxs2("div", { className:
|
|
75
|
-
/* @__PURE__ */ jsx2("h2", { className:
|
|
76
|
-
/* @__PURE__ */ jsx2("p", { className:
|
|
75
|
+
return /* @__PURE__ */ jsx2("section", { className: CVSection_default.cv, id: "cv", children: /* @__PURE__ */ jsxs2("div", { className: CVSection_default.card, children: [
|
|
76
|
+
/* @__PURE__ */ jsxs2("div", { className: CVSection_default.content, children: [
|
|
77
|
+
/* @__PURE__ */ jsx2("span", { className: CVSection_default.iconWrapper, children: /* @__PURE__ */ jsx2("span", { className: "material-symbols-outlined", children: "history_edu" }) }),
|
|
78
|
+
/* @__PURE__ */ jsxs2("div", { className: CVSection_default.textContent, children: [
|
|
79
|
+
/* @__PURE__ */ jsx2("h2", { className: CVSection_default.title, children: heading }),
|
|
80
|
+
/* @__PURE__ */ jsx2("p", { className: CVSection_default.description, children: description })
|
|
77
81
|
] }),
|
|
78
82
|
cvFileUrl ? /* @__PURE__ */ jsxs2(
|
|
79
83
|
"a",
|
|
@@ -81,40 +85,82 @@ function CVSection({
|
|
|
81
85
|
href: cvFileUrl,
|
|
82
86
|
target: "_blank",
|
|
83
87
|
rel: "noopener noreferrer",
|
|
84
|
-
className:
|
|
88
|
+
className: CVSection_default.downloadBtn,
|
|
85
89
|
children: [
|
|
86
90
|
/* @__PURE__ */ jsx2("span", { className: "material-symbols-outlined", children: "download" }),
|
|
87
91
|
buttonText
|
|
88
92
|
]
|
|
89
93
|
}
|
|
90
|
-
) : /* @__PURE__ */ jsxs2("button", { className:
|
|
94
|
+
) : /* @__PURE__ */ jsxs2("button", { className: CVSection_default.downloadBtn, disabled: true, children: [
|
|
91
95
|
/* @__PURE__ */ jsx2("span", { className: "material-symbols-outlined", children: "download" }),
|
|
92
96
|
buttonText
|
|
93
97
|
] })
|
|
94
98
|
] }),
|
|
95
|
-
/* @__PURE__ */ jsx2("div", { className:
|
|
99
|
+
/* @__PURE__ */ jsx2("div", { className: CVSection_default.background })
|
|
96
100
|
] }) });
|
|
97
101
|
}
|
|
98
102
|
|
|
103
|
+
// src/styles/Footer.module.css
|
|
104
|
+
var Footer_default = {};
|
|
105
|
+
|
|
99
106
|
// src/components/Footer.tsx
|
|
100
|
-
import styles3 from "@/styles/Footer.module.css";
|
|
101
107
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
102
108
|
function Footer({ footerText, email }) {
|
|
103
|
-
return /* @__PURE__ */ jsx3("footer", { className:
|
|
104
|
-
/* @__PURE__ */ jsx3("p", { className:
|
|
105
|
-
email && /* @__PURE__ */ jsxs3("div", { className:
|
|
109
|
+
return /* @__PURE__ */ jsx3("footer", { className: Footer_default.footer, children: /* @__PURE__ */ jsxs3("div", { className: Footer_default.content, children: [
|
|
110
|
+
/* @__PURE__ */ jsx3("p", { className: Footer_default.copyright, children: footerText }),
|
|
111
|
+
email && /* @__PURE__ */ jsxs3("div", { className: Footer_default.emailWrapper, children: [
|
|
106
112
|
/* @__PURE__ */ jsx3("span", { className: "material-symbols-outlined", children: "mail" }),
|
|
107
|
-
/* @__PURE__ */ jsx3("a", { href: `mailto:${email}`, className:
|
|
113
|
+
/* @__PURE__ */ jsx3("a", { href: `mailto:${email}`, className: Footer_default.email, children: email })
|
|
108
114
|
] })
|
|
109
115
|
] }) });
|
|
110
116
|
}
|
|
111
117
|
|
|
112
118
|
// src/components/Header.tsx
|
|
113
|
-
import { useState } from "react";
|
|
119
|
+
import { useState as useState2 } from "react";
|
|
114
120
|
import Link from "next/link";
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
121
|
+
|
|
122
|
+
// src/styles/Header.module.css
|
|
123
|
+
var Header_default = {};
|
|
124
|
+
|
|
125
|
+
// src/context/ThemeContext.tsx
|
|
126
|
+
import { createContext, useContext, useEffect, useState } from "react";
|
|
127
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
128
|
+
var ThemeContext = createContext({
|
|
129
|
+
theme: "light",
|
|
130
|
+
toggleTheme: () => {
|
|
131
|
+
},
|
|
132
|
+
mounted: false
|
|
133
|
+
});
|
|
134
|
+
function ThemeProvider({ children }) {
|
|
135
|
+
const [theme, setTheme] = useState("light");
|
|
136
|
+
const [mounted, setMounted] = useState(false);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
setMounted(true);
|
|
139
|
+
const savedTheme = localStorage.getItem("theme");
|
|
140
|
+
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
141
|
+
if (savedTheme) {
|
|
142
|
+
setTheme(savedTheme);
|
|
143
|
+
} else if (prefersDark) {
|
|
144
|
+
setTheme("dark");
|
|
145
|
+
}
|
|
146
|
+
}, []);
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
if (mounted) {
|
|
149
|
+
document.documentElement.setAttribute("data-theme", theme);
|
|
150
|
+
localStorage.setItem("theme", theme);
|
|
151
|
+
}
|
|
152
|
+
}, [theme, mounted]);
|
|
153
|
+
const toggleTheme = () => {
|
|
154
|
+
setTheme((prev) => prev === "light" ? "dark" : "light");
|
|
155
|
+
};
|
|
156
|
+
return /* @__PURE__ */ jsx4(ThemeContext.Provider, { value: { theme, toggleTheme, mounted }, children });
|
|
157
|
+
}
|
|
158
|
+
function useTheme() {
|
|
159
|
+
return useContext(ThemeContext);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// src/components/Header.tsx
|
|
163
|
+
import { Fragment, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
118
164
|
function Header({
|
|
119
165
|
siteName,
|
|
120
166
|
navLinks,
|
|
@@ -122,7 +168,7 @@ function Header({
|
|
|
122
168
|
contactButtonText = "Contact",
|
|
123
169
|
contactEmail = ""
|
|
124
170
|
}) {
|
|
125
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
171
|
+
const [mobileMenuOpen, setMobileMenuOpen] = useState2(false);
|
|
126
172
|
const { theme, toggleTheme, mounted } = useTheme();
|
|
127
173
|
const toggleMobileMenu = () => {
|
|
128
174
|
setMobileMenuOpen(!mobileMenuOpen);
|
|
@@ -131,76 +177,76 @@ function Header({
|
|
|
131
177
|
setMobileMenuOpen(false);
|
|
132
178
|
};
|
|
133
179
|
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
134
|
-
/* @__PURE__ */
|
|
135
|
-
/* @__PURE__ */ jsxs4(Link, { href: "/", className:
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
180
|
+
/* @__PURE__ */ jsx5("header", { className: Header_default.header, children: /* @__PURE__ */ jsxs4("div", { className: Header_default.headerInner, children: [
|
|
181
|
+
/* @__PURE__ */ jsxs4(Link, { href: "/", className: Header_default.logo, children: [
|
|
182
|
+
/* @__PURE__ */ jsx5("div", { className: Header_default.logoIcon, children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: "hexagon" }) }),
|
|
183
|
+
/* @__PURE__ */ jsx5("h2", { className: Header_default.siteName, children: siteName })
|
|
138
184
|
] }),
|
|
139
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
140
|
-
/* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ jsxs4("div", { className: Header_default.desktopNav, children: [
|
|
186
|
+
/* @__PURE__ */ jsx5("nav", { className: Header_default.navLinks, children: navLinks.map((link) => /* @__PURE__ */ jsx5(
|
|
141
187
|
Link,
|
|
142
188
|
{
|
|
143
189
|
href: link.href,
|
|
144
|
-
className:
|
|
190
|
+
className: Header_default.navLink,
|
|
145
191
|
children: link.label
|
|
146
192
|
},
|
|
147
193
|
link.href
|
|
148
194
|
)) }),
|
|
149
|
-
mounted && /* @__PURE__ */
|
|
195
|
+
mounted && /* @__PURE__ */ jsx5(
|
|
150
196
|
"button",
|
|
151
197
|
{
|
|
152
|
-
className:
|
|
198
|
+
className: Header_default.themeToggle,
|
|
153
199
|
onClick: toggleTheme,
|
|
154
200
|
"aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
|
|
155
|
-
children: /* @__PURE__ */
|
|
201
|
+
children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
|
|
156
202
|
}
|
|
157
203
|
),
|
|
158
|
-
showContactButton && contactEmail && /* @__PURE__ */
|
|
204
|
+
showContactButton && contactEmail && /* @__PURE__ */ jsx5(
|
|
159
205
|
"a",
|
|
160
206
|
{
|
|
161
207
|
href: `mailto:${contactEmail}`,
|
|
162
|
-
className:
|
|
163
|
-
children: /* @__PURE__ */
|
|
208
|
+
className: Header_default.contactBtn,
|
|
209
|
+
children: /* @__PURE__ */ jsx5("span", { children: contactButtonText })
|
|
164
210
|
}
|
|
165
211
|
)
|
|
166
212
|
] }),
|
|
167
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
168
|
-
mounted && /* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ jsxs4("div", { className: Header_default.mobileActions, children: [
|
|
214
|
+
mounted && /* @__PURE__ */ jsx5(
|
|
169
215
|
"button",
|
|
170
216
|
{
|
|
171
|
-
className:
|
|
217
|
+
className: Header_default.mobileThemeToggle,
|
|
172
218
|
onClick: toggleTheme,
|
|
173
219
|
"aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
|
|
174
|
-
children: /* @__PURE__ */
|
|
220
|
+
children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
|
|
175
221
|
}
|
|
176
222
|
),
|
|
177
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ jsx5(
|
|
178
224
|
"button",
|
|
179
225
|
{
|
|
180
|
-
className:
|
|
226
|
+
className: Header_default.mobileMenuBtn,
|
|
181
227
|
onClick: toggleMobileMenu,
|
|
182
228
|
"aria-label": "Toggle menu",
|
|
183
|
-
children: /* @__PURE__ */
|
|
229
|
+
children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: mobileMenuOpen ? "close" : "menu" })
|
|
184
230
|
}
|
|
185
231
|
)
|
|
186
232
|
] })
|
|
187
233
|
] }) }),
|
|
188
|
-
/* @__PURE__ */ jsxs4("div", { className: `${
|
|
189
|
-
/* @__PURE__ */
|
|
234
|
+
/* @__PURE__ */ jsxs4("div", { className: `${Header_default.mobileMenu} ${mobileMenuOpen ? Header_default.open : ""}`, children: [
|
|
235
|
+
/* @__PURE__ */ jsx5("nav", { className: Header_default.mobileNavLinks, children: navLinks.map((link) => /* @__PURE__ */ jsx5(
|
|
190
236
|
Link,
|
|
191
237
|
{
|
|
192
238
|
href: link.href,
|
|
193
|
-
className:
|
|
239
|
+
className: Header_default.mobileNavLink,
|
|
194
240
|
onClick: closeMobileMenu,
|
|
195
241
|
children: link.label
|
|
196
242
|
},
|
|
197
243
|
link.href
|
|
198
244
|
)) }),
|
|
199
|
-
showContactButton && contactEmail && /* @__PURE__ */
|
|
245
|
+
showContactButton && contactEmail && /* @__PURE__ */ jsx5(
|
|
200
246
|
"a",
|
|
201
247
|
{
|
|
202
248
|
href: `mailto:${contactEmail}`,
|
|
203
|
-
className:
|
|
249
|
+
className: Header_default.mobileContactBtn,
|
|
204
250
|
children: contactButtonText
|
|
205
251
|
}
|
|
206
252
|
)
|
|
@@ -210,25 +256,29 @@ function Header({
|
|
|
210
256
|
|
|
211
257
|
// src/components/Projects.tsx
|
|
212
258
|
import Link2 from "next/link";
|
|
213
|
-
|
|
214
|
-
|
|
259
|
+
|
|
260
|
+
// src/styles/Projects.module.css
|
|
261
|
+
var Projects_default = {};
|
|
262
|
+
|
|
263
|
+
// src/components/Projects.tsx
|
|
264
|
+
import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
215
265
|
function Projects({
|
|
216
266
|
projects,
|
|
217
267
|
showViewAll = true,
|
|
218
268
|
viewAllUrl = "#"
|
|
219
269
|
}) {
|
|
220
|
-
return /* @__PURE__ */ jsxs5("section", { className:
|
|
221
|
-
/* @__PURE__ */ jsxs5("div", { className:
|
|
222
|
-
/* @__PURE__ */
|
|
223
|
-
showViewAll && /* @__PURE__ */
|
|
270
|
+
return /* @__PURE__ */ jsxs5("section", { className: Projects_default.projects, id: "projects", children: [
|
|
271
|
+
/* @__PURE__ */ jsxs5("div", { className: Projects_default.header, children: [
|
|
272
|
+
/* @__PURE__ */ jsx6("h2", { className: Projects_default.title, children: "Selected Projects" }),
|
|
273
|
+
showViewAll && /* @__PURE__ */ jsx6(Link2, { href: viewAllUrl, className: Projects_default.viewAllLink, children: "View all projects" })
|
|
224
274
|
] }),
|
|
225
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ jsx6("div", { className: Projects_default.grid, children: projects.map((project) => {
|
|
226
276
|
const projectUrl = project.slug?.current ? `/projects/${project.slug.current}` : project.caseStudyUrl;
|
|
227
277
|
const CardContent = /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
228
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ jsx6("div", { className: Projects_default.imageWrapper, children: /* @__PURE__ */ jsx6(
|
|
229
279
|
"div",
|
|
230
280
|
{
|
|
231
|
-
className:
|
|
281
|
+
className: Projects_default.image,
|
|
232
282
|
style: {
|
|
233
283
|
backgroundImage: project.imageUrl ? `url("${project.imageUrl}")` : void 0,
|
|
234
284
|
backgroundColor: project.imageUrl ? void 0 : "#e5e7eb"
|
|
@@ -237,52 +287,54 @@ function Projects({
|
|
|
237
287
|
"aria-label": project.imageAlt || project.title
|
|
238
288
|
}
|
|
239
289
|
) }),
|
|
240
|
-
/* @__PURE__ */ jsxs5("div", { className:
|
|
241
|
-
/* @__PURE__ */
|
|
242
|
-
/* @__PURE__ */
|
|
243
|
-
/* @__PURE__ */ jsxs5("span", { className:
|
|
290
|
+
/* @__PURE__ */ jsxs5("div", { className: Projects_default.content, children: [
|
|
291
|
+
/* @__PURE__ */ jsx6("h3", { className: Projects_default.projectTitle, children: project.title }),
|
|
292
|
+
/* @__PURE__ */ jsx6("p", { className: Projects_default.description, children: project.description }),
|
|
293
|
+
/* @__PURE__ */ jsxs5("span", { className: Projects_default.caseStudyLink, children: [
|
|
244
294
|
"View Project",
|
|
245
295
|
" ",
|
|
246
|
-
/* @__PURE__ */
|
|
296
|
+
/* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "arrow_forward" })
|
|
247
297
|
] })
|
|
248
298
|
] })
|
|
249
299
|
] });
|
|
250
|
-
return project.slug?.current ? /* @__PURE__ */
|
|
300
|
+
return project.slug?.current ? /* @__PURE__ */ jsx6(
|
|
251
301
|
Link2,
|
|
252
302
|
{
|
|
253
303
|
href: projectUrl,
|
|
254
|
-
className:
|
|
304
|
+
className: Projects_default.card,
|
|
255
305
|
children: CardContent
|
|
256
306
|
},
|
|
257
307
|
project._id
|
|
258
|
-
) : /* @__PURE__ */
|
|
308
|
+
) : /* @__PURE__ */ jsx6("div", { className: Projects_default.card, children: CardContent }, project._id);
|
|
259
309
|
}) })
|
|
260
310
|
] });
|
|
261
311
|
}
|
|
262
312
|
|
|
313
|
+
// src/styles/Publications.module.css
|
|
314
|
+
var Publications_default = {};
|
|
315
|
+
|
|
263
316
|
// src/components/Publications.tsx
|
|
264
|
-
import
|
|
265
|
-
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
317
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
266
318
|
function Publications({ publications }) {
|
|
267
|
-
return /* @__PURE__ */ jsxs6("section", { className:
|
|
268
|
-
/* @__PURE__ */
|
|
269
|
-
/* @__PURE__ */
|
|
270
|
-
/* @__PURE__ */ jsxs6("div", { className:
|
|
271
|
-
/* @__PURE__ */
|
|
272
|
-
/* @__PURE__ */
|
|
319
|
+
return /* @__PURE__ */ jsxs6("section", { className: Publications_default.publications, id: "publications", children: [
|
|
320
|
+
/* @__PURE__ */ jsx7("div", { className: Publications_default.header, children: /* @__PURE__ */ jsx7("h2", { className: Publications_default.title, children: "Recent Publications" }) }),
|
|
321
|
+
/* @__PURE__ */ jsx7("div", { className: Publications_default.list, children: publications.map((pub) => /* @__PURE__ */ jsxs6("div", { className: Publications_default.item, children: [
|
|
322
|
+
/* @__PURE__ */ jsxs6("div", { className: Publications_default.itemHeader, children: [
|
|
323
|
+
/* @__PURE__ */ jsx7("h3", { className: Publications_default.pubTitle, children: pub.title }),
|
|
324
|
+
/* @__PURE__ */ jsx7("span", { className: Publications_default.year, children: pub.year })
|
|
273
325
|
] }),
|
|
274
|
-
/* @__PURE__ */
|
|
275
|
-
/* @__PURE__ */
|
|
276
|
-
/* @__PURE__ */ jsxs6("div", { className:
|
|
326
|
+
/* @__PURE__ */ jsx7("p", { className: Publications_default.authors, children: pub.authors }),
|
|
327
|
+
/* @__PURE__ */ jsx7("p", { className: Publications_default.venue, children: pub.venue }),
|
|
328
|
+
/* @__PURE__ */ jsxs6("div", { className: Publications_default.links, children: [
|
|
277
329
|
pub.pdfUrl && /* @__PURE__ */ jsxs6(
|
|
278
330
|
"a",
|
|
279
331
|
{
|
|
280
332
|
href: pub.pdfUrl,
|
|
281
333
|
target: "_blank",
|
|
282
334
|
rel: "noopener noreferrer",
|
|
283
|
-
className:
|
|
335
|
+
className: Publications_default.linkBtn,
|
|
284
336
|
children: [
|
|
285
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ jsx7("span", { className: "material-symbols-outlined", children: "description" }),
|
|
286
338
|
"PDF"
|
|
287
339
|
]
|
|
288
340
|
}
|
|
@@ -293,9 +345,9 @@ function Publications({ publications }) {
|
|
|
293
345
|
href: pub.codeUrl,
|
|
294
346
|
target: "_blank",
|
|
295
347
|
rel: "noopener noreferrer",
|
|
296
|
-
className:
|
|
348
|
+
className: Publications_default.linkBtn,
|
|
297
349
|
children: [
|
|
298
|
-
/* @__PURE__ */
|
|
350
|
+
/* @__PURE__ */ jsx7("span", { className: "material-symbols-outlined", children: "code" }),
|
|
299
351
|
"Code"
|
|
300
352
|
]
|
|
301
353
|
}
|
|
@@ -306,9 +358,9 @@ function Publications({ publications }) {
|
|
|
306
358
|
href: pub.videoUrl,
|
|
307
359
|
target: "_blank",
|
|
308
360
|
rel: "noopener noreferrer",
|
|
309
|
-
className:
|
|
361
|
+
className: Publications_default.linkBtn,
|
|
310
362
|
children: [
|
|
311
|
-
/* @__PURE__ */
|
|
363
|
+
/* @__PURE__ */ jsx7("span", { className: "material-symbols-outlined", children: "videocam" }),
|
|
312
364
|
"Video"
|
|
313
365
|
]
|
|
314
366
|
}
|
|
@@ -320,9 +372,9 @@ function Publications({ publications }) {
|
|
|
320
372
|
navigator.clipboard.writeText(pub.bibtex || "");
|
|
321
373
|
alert("BibTeX copied to clipboard!");
|
|
322
374
|
},
|
|
323
|
-
className:
|
|
375
|
+
className: Publications_default.linkBtn,
|
|
324
376
|
children: [
|
|
325
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ jsx7("span", { className: "material-symbols-outlined", children: "format_quote" }),
|
|
326
378
|
"BibTeX"
|
|
327
379
|
]
|
|
328
380
|
}
|
|
@@ -331,11 +383,181 @@ function Publications({ publications }) {
|
|
|
331
383
|
] }, pub._id)) })
|
|
332
384
|
] });
|
|
333
385
|
}
|
|
386
|
+
|
|
387
|
+
// src/config.ts
|
|
388
|
+
function defineConfig(config) {
|
|
389
|
+
return config;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// src/schemas/client.ts
|
|
393
|
+
import { createClient } from "next-sanity";
|
|
394
|
+
|
|
395
|
+
// src/schemas/env.ts
|
|
396
|
+
var apiVersion = process.env.NEXT_PUBLIC_SANITY_API_VERSION || "2024-01-01";
|
|
397
|
+
var dataset = process.env.NEXT_PUBLIC_SANITY_DATASET || "production";
|
|
398
|
+
var projectId = process.env.NEXT_PUBLIC_SANITY_PROJECT_ID || "";
|
|
399
|
+
var useCdn = false;
|
|
400
|
+
|
|
401
|
+
// src/schemas/client.ts
|
|
402
|
+
var client = projectId ? createClient({
|
|
403
|
+
projectId,
|
|
404
|
+
dataset,
|
|
405
|
+
apiVersion,
|
|
406
|
+
useCdn
|
|
407
|
+
}) : null;
|
|
408
|
+
|
|
409
|
+
// src/schemas/queries.ts
|
|
410
|
+
import { groq } from "next-sanity";
|
|
411
|
+
var siteSettingsQuery = groq`
|
|
412
|
+
*[_type == "siteSettings"][0] {
|
|
413
|
+
siteName,
|
|
414
|
+
siteTitle,
|
|
415
|
+
primaryColor,
|
|
416
|
+
backgroundColor,
|
|
417
|
+
textColor,
|
|
418
|
+
secondaryTextColor,
|
|
419
|
+
contactEmail,
|
|
420
|
+
footerText
|
|
421
|
+
}
|
|
422
|
+
`;
|
|
423
|
+
var navigationQuery = groq`
|
|
424
|
+
*[_type == "navigation"][0] {
|
|
425
|
+
links[] {
|
|
426
|
+
label,
|
|
427
|
+
href
|
|
428
|
+
},
|
|
429
|
+
showContactButton,
|
|
430
|
+
contactButtonText
|
|
431
|
+
}
|
|
432
|
+
`;
|
|
433
|
+
var aboutQuery = groq`
|
|
434
|
+
*[_type == "about"][0] {
|
|
435
|
+
name,
|
|
436
|
+
greeting,
|
|
437
|
+
title,
|
|
438
|
+
bio,
|
|
439
|
+
"profileImageUrl": profileImage.asset->url,
|
|
440
|
+
socialLinks[] {
|
|
441
|
+
platform,
|
|
442
|
+
url
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
`;
|
|
446
|
+
var projectsQuery = groq`
|
|
447
|
+
*[_type == "project" && featured == true] | order(order asc) {
|
|
448
|
+
_id,
|
|
449
|
+
title,
|
|
450
|
+
description,
|
|
451
|
+
"imageUrl": image.asset->url,
|
|
452
|
+
imageAlt,
|
|
453
|
+
caseStudyUrl,
|
|
454
|
+
slug
|
|
455
|
+
}
|
|
456
|
+
`;
|
|
457
|
+
var publicationsQuery = groq`
|
|
458
|
+
*[_type == "publication"] | order(year desc, order asc) {
|
|
459
|
+
_id,
|
|
460
|
+
title,
|
|
461
|
+
authors,
|
|
462
|
+
venue,
|
|
463
|
+
year,
|
|
464
|
+
pdfUrl,
|
|
465
|
+
codeUrl,
|
|
466
|
+
videoUrl,
|
|
467
|
+
bibtex
|
|
468
|
+
}
|
|
469
|
+
`;
|
|
470
|
+
var cvSectionQuery = groq`
|
|
471
|
+
*[_type == "cvSection"][0] {
|
|
472
|
+
heading,
|
|
473
|
+
description,
|
|
474
|
+
buttonText,
|
|
475
|
+
"cvFileUrl": cvFile.asset->url
|
|
476
|
+
}
|
|
477
|
+
`;
|
|
478
|
+
var projectBySlugQuery = groq`
|
|
479
|
+
*[_type == "project" && slug.current == $slug][0] {
|
|
480
|
+
_id,
|
|
481
|
+
title,
|
|
482
|
+
description,
|
|
483
|
+
"imageUrl": image.asset->url,
|
|
484
|
+
imageAlt,
|
|
485
|
+
caseStudyUrl,
|
|
486
|
+
slug
|
|
487
|
+
}
|
|
488
|
+
`;
|
|
489
|
+
var allProjectSlugsQuery = groq`
|
|
490
|
+
*[_type == "project" && defined(slug.current)][].slug.current
|
|
491
|
+
`;
|
|
492
|
+
|
|
493
|
+
// src/lib/sanity.ts
|
|
494
|
+
async function getSiteSettings() {
|
|
495
|
+
if (!client) return null;
|
|
496
|
+
return client.fetch(siteSettingsQuery);
|
|
497
|
+
}
|
|
498
|
+
async function getNavigation() {
|
|
499
|
+
if (!client) return null;
|
|
500
|
+
return client.fetch(navigationQuery);
|
|
501
|
+
}
|
|
502
|
+
async function getAbout() {
|
|
503
|
+
if (!client) return null;
|
|
504
|
+
return client.fetch(aboutQuery);
|
|
505
|
+
}
|
|
506
|
+
async function getProjects() {
|
|
507
|
+
if (!client) return [];
|
|
508
|
+
return client.fetch(projectsQuery);
|
|
509
|
+
}
|
|
510
|
+
async function getPublications() {
|
|
511
|
+
if (!client) return [];
|
|
512
|
+
return client.fetch(publicationsQuery);
|
|
513
|
+
}
|
|
514
|
+
async function getCVSection() {
|
|
515
|
+
if (!client) return null;
|
|
516
|
+
return client.fetch(cvSectionQuery);
|
|
517
|
+
}
|
|
518
|
+
async function getAllPageData() {
|
|
519
|
+
const [siteSettings, navigation, about, projects, publications, cvSection] = await Promise.all([
|
|
520
|
+
getSiteSettings(),
|
|
521
|
+
getNavigation(),
|
|
522
|
+
getAbout(),
|
|
523
|
+
getProjects(),
|
|
524
|
+
getPublications(),
|
|
525
|
+
getCVSection()
|
|
526
|
+
]);
|
|
527
|
+
return {
|
|
528
|
+
siteSettings,
|
|
529
|
+
navigation,
|
|
530
|
+
about,
|
|
531
|
+
projects,
|
|
532
|
+
publications,
|
|
533
|
+
cvSection
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
async function getProjectBySlug(slug) {
|
|
537
|
+
if (!client) return null;
|
|
538
|
+
return client.fetch(projectBySlugQuery, { slug });
|
|
539
|
+
}
|
|
540
|
+
async function getAllProjectSlugs() {
|
|
541
|
+
if (!client) return [];
|
|
542
|
+
return client.fetch(allProjectSlugsQuery);
|
|
543
|
+
}
|
|
334
544
|
export {
|
|
335
545
|
About,
|
|
336
546
|
CVSection,
|
|
337
547
|
Footer,
|
|
338
548
|
Header,
|
|
339
549
|
Projects,
|
|
340
|
-
Publications
|
|
550
|
+
Publications,
|
|
551
|
+
ThemeProvider,
|
|
552
|
+
defineConfig,
|
|
553
|
+
getAbout,
|
|
554
|
+
getAllPageData,
|
|
555
|
+
getAllProjectSlugs,
|
|
556
|
+
getCVSection,
|
|
557
|
+
getNavigation,
|
|
558
|
+
getProjectBySlug,
|
|
559
|
+
getProjects,
|
|
560
|
+
getPublications,
|
|
561
|
+
getSiteSettings,
|
|
562
|
+
useTheme
|
|
341
563
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { S as SiteSettings, A as About } from '../index-CZBtPfWB.mjs';
|
|
3
|
+
|
|
4
|
+
interface RootLayoutProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
settings?: SiteSettings | null;
|
|
7
|
+
about?: About | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Root layout component that provides theme context
|
|
11
|
+
*/
|
|
12
|
+
declare function RootLayout({ children, settings, about, }: RootLayoutProps): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { RootLayout, type RootLayoutProps };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { S as SiteSettings, A as About } from '../index-CZBtPfWB.js';
|
|
3
|
+
|
|
4
|
+
interface RootLayoutProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
settings?: SiteSettings | null;
|
|
7
|
+
about?: About | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Root layout component that provides theme context
|
|
11
|
+
*/
|
|
12
|
+
declare function RootLayout({ children, settings, about, }: RootLayoutProps): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { RootLayout, type RootLayoutProps };
|