@prosophia/personal-portfolio 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Divider.module.css +11 -0
- package/dist/Experience.module.css +122 -0
- package/dist/Footer.module.css +36 -0
- package/dist/Header.module.css +242 -0
- package/dist/Hero.module.css +239 -0
- package/dist/Projects.module.css +113 -0
- package/dist/Publications.module.css +154 -0
- package/dist/index-dczHpph_.d.mts +106 -0
- package/dist/index-dczHpph_.d.ts +106 -0
- package/dist/index.css +795 -0
- package/dist/index.d.mts +130 -0
- package/dist/index.d.ts +130 -0
- package/dist/index.js +737 -206
- package/dist/index.mjs +697 -180
- package/dist/layouts/index.d.mts +14 -0
- package/dist/layouts/index.d.ts +14 -0
- package/dist/layouts/index.js +331 -0
- package/dist/layouts/index.mjs +304 -0
- package/dist/schemas/index.d.mts +433 -0
- package/dist/schemas/index.d.ts +433 -0
- package/dist/schemas/index.js +457 -0
- package/dist/schemas/index.mjs +424 -0
- package/dist/styles/globals.css +1 -0
- package/package.json +19 -7
package/dist/index.mjs
CHANGED
|
@@ -1,16 +1,449 @@
|
|
|
1
|
+
// src/components/Divider.module.css
|
|
2
|
+
var Divider_default = {};
|
|
3
|
+
|
|
1
4
|
// src/components/Divider.tsx
|
|
2
|
-
import styles from "./Divider.module.css";
|
|
3
5
|
import { jsx } from "react/jsx-runtime";
|
|
4
6
|
function Divider() {
|
|
5
|
-
return /* @__PURE__ */ jsx("hr", { className:
|
|
7
|
+
return /* @__PURE__ */ jsx("hr", { className: Divider_default.divider });
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
// src/components/Experience.tsx
|
|
9
11
|
import { motion } from "framer-motion";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
|
|
13
|
+
// src/components/Experience.module.css
|
|
14
|
+
var Experience_default = {};
|
|
15
|
+
|
|
16
|
+
// src/styles/motion.ts
|
|
17
|
+
var easeOutExpo = [0.16, 1, 0.3, 1];
|
|
18
|
+
var springStiff = {
|
|
19
|
+
mass: 1,
|
|
20
|
+
stiffness: 100,
|
|
21
|
+
damping: 15
|
|
22
|
+
};
|
|
23
|
+
var timing = {
|
|
24
|
+
quick: 0.15,
|
|
25
|
+
standard: 0.35,
|
|
26
|
+
ambient: 0.8
|
|
27
|
+
};
|
|
28
|
+
var fadeInUp = {
|
|
29
|
+
hidden: {
|
|
30
|
+
opacity: 0,
|
|
31
|
+
y: 20
|
|
32
|
+
},
|
|
33
|
+
visible: {
|
|
34
|
+
opacity: 1,
|
|
35
|
+
y: 0,
|
|
36
|
+
transition: {
|
|
37
|
+
duration: timing.standard,
|
|
38
|
+
ease: easeOutExpo
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
var fadeIn = {
|
|
43
|
+
hidden: {
|
|
44
|
+
opacity: 0
|
|
45
|
+
},
|
|
46
|
+
visible: {
|
|
47
|
+
opacity: 1,
|
|
48
|
+
transition: {
|
|
49
|
+
duration: timing.standard,
|
|
50
|
+
ease: easeOutExpo
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var blurFade = {
|
|
55
|
+
hidden: {
|
|
56
|
+
opacity: 0,
|
|
57
|
+
filter: "blur(10px)"
|
|
58
|
+
},
|
|
59
|
+
visible: {
|
|
60
|
+
opacity: 1,
|
|
61
|
+
filter: "blur(0px)",
|
|
62
|
+
transition: {
|
|
63
|
+
duration: timing.standard,
|
|
64
|
+
ease: easeOutExpo
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
var staggerContainer = {
|
|
69
|
+
hidden: { opacity: 1 },
|
|
70
|
+
visible: {
|
|
71
|
+
opacity: 1,
|
|
72
|
+
transition: {
|
|
73
|
+
staggerChildren: 0.05,
|
|
74
|
+
delayChildren: 0.1
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var slideInLeft = {
|
|
79
|
+
hidden: {
|
|
80
|
+
opacity: 0,
|
|
81
|
+
x: -20
|
|
82
|
+
},
|
|
83
|
+
visible: {
|
|
84
|
+
opacity: 1,
|
|
85
|
+
x: 0,
|
|
86
|
+
transition: {
|
|
87
|
+
duration: timing.standard,
|
|
88
|
+
ease: easeOutExpo
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
var scaleUp = {
|
|
93
|
+
hidden: {
|
|
94
|
+
opacity: 0,
|
|
95
|
+
scale: 0.95
|
|
96
|
+
},
|
|
97
|
+
visible: {
|
|
98
|
+
opacity: 1,
|
|
99
|
+
scale: 1,
|
|
100
|
+
transition: {
|
|
101
|
+
duration: timing.standard,
|
|
102
|
+
ease: easeOutExpo
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
var hoverLift = {
|
|
107
|
+
y: -5,
|
|
108
|
+
transition: {
|
|
109
|
+
type: "spring",
|
|
110
|
+
mass: springStiff.mass,
|
|
111
|
+
stiffness: springStiff.stiffness,
|
|
112
|
+
damping: springStiff.damping
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var tapScale = {
|
|
116
|
+
scale: 0.95
|
|
117
|
+
};
|
|
118
|
+
var cardHover = {
|
|
119
|
+
scale: 1.02,
|
|
120
|
+
transition: {
|
|
121
|
+
type: "spring",
|
|
122
|
+
mass: springStiff.mass,
|
|
123
|
+
stiffness: springStiff.stiffness,
|
|
124
|
+
damping: springStiff.damping
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
var pageTransition = {
|
|
128
|
+
initial: {
|
|
129
|
+
opacity: 0,
|
|
130
|
+
x: -20
|
|
131
|
+
},
|
|
132
|
+
animate: {
|
|
133
|
+
opacity: 1,
|
|
134
|
+
x: 0,
|
|
135
|
+
transition: {
|
|
136
|
+
duration: timing.standard,
|
|
137
|
+
ease: easeOutExpo
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
exit: {
|
|
141
|
+
opacity: 0,
|
|
142
|
+
x: 20,
|
|
143
|
+
transition: {
|
|
144
|
+
duration: timing.quick,
|
|
145
|
+
ease: easeOutExpo
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// src/context/SiteSettingsContext.tsx
|
|
151
|
+
import { createContext as createContext2, useContext as useContext2, useEffect as useEffect2 } from "react";
|
|
152
|
+
|
|
153
|
+
// src/context/ThemeContext.tsx
|
|
154
|
+
import { createContext, useContext, useEffect, useState } from "react";
|
|
155
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
156
|
+
var ThemeContext = createContext({
|
|
157
|
+
theme: "dark",
|
|
158
|
+
toggleTheme: () => {
|
|
159
|
+
},
|
|
160
|
+
mounted: false
|
|
161
|
+
});
|
|
162
|
+
function ThemeProvider({ children }) {
|
|
163
|
+
const [theme, setTheme] = useState("dark");
|
|
164
|
+
const [mounted, setMounted] = useState(false);
|
|
165
|
+
useEffect(() => {
|
|
166
|
+
setMounted(true);
|
|
167
|
+
const stored = localStorage.getItem("theme");
|
|
168
|
+
if (stored) {
|
|
169
|
+
setTheme(stored);
|
|
170
|
+
} else if (window.matchMedia("(prefers-color-scheme: light)").matches) {
|
|
171
|
+
setTheme("light");
|
|
172
|
+
}
|
|
173
|
+
}, []);
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
if (mounted) {
|
|
176
|
+
document.documentElement.setAttribute("data-theme", theme);
|
|
177
|
+
localStorage.setItem("theme", theme);
|
|
178
|
+
}
|
|
179
|
+
}, [theme, mounted]);
|
|
180
|
+
const toggleTheme = () => {
|
|
181
|
+
setTheme((prev) => prev === "dark" ? "light" : "dark");
|
|
182
|
+
};
|
|
183
|
+
return /* @__PURE__ */ jsx2(ThemeContext.Provider, { value: { theme, toggleTheme, mounted }, children: /* @__PURE__ */ jsx2("div", { "data-theme": theme, children }) });
|
|
184
|
+
}
|
|
185
|
+
function useTheme() {
|
|
186
|
+
const context = useContext(ThemeContext);
|
|
187
|
+
return context;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// src/lib/themeColors.ts
|
|
191
|
+
var colorPresets = {
|
|
192
|
+
violet: {
|
|
193
|
+
light: {
|
|
194
|
+
primary: "#8b5cf6",
|
|
195
|
+
primaryHover: "#7c3aed",
|
|
196
|
+
primaryLight: "#a78bfa",
|
|
197
|
+
tagBg: "rgba(139, 92, 246, 0.1)",
|
|
198
|
+
shadow: "rgba(139, 92, 246, 0.15)",
|
|
199
|
+
borderHighlight: "rgba(139, 92, 246, 0.2)",
|
|
200
|
+
glassBorder: "rgba(139, 92, 246, 0.1)"
|
|
201
|
+
},
|
|
202
|
+
dark: {
|
|
203
|
+
primary: "#a78bfa",
|
|
204
|
+
primaryHover: "#8b5cf6",
|
|
205
|
+
primaryLight: "#c4b5fd",
|
|
206
|
+
tagBg: "rgba(167, 139, 250, 0.15)",
|
|
207
|
+
shadow: "rgba(139, 92, 246, 0.2)",
|
|
208
|
+
borderHighlight: "rgba(167, 139, 250, 0.2)",
|
|
209
|
+
glassBorder: "rgba(167, 139, 250, 0.1)"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
blue: {
|
|
213
|
+
light: {
|
|
214
|
+
primary: "#3b82f6",
|
|
215
|
+
primaryHover: "#2563eb",
|
|
216
|
+
primaryLight: "#60a5fa",
|
|
217
|
+
tagBg: "rgba(59, 130, 246, 0.1)",
|
|
218
|
+
shadow: "rgba(59, 130, 246, 0.15)",
|
|
219
|
+
borderHighlight: "rgba(59, 130, 246, 0.2)",
|
|
220
|
+
glassBorder: "rgba(59, 130, 246, 0.1)"
|
|
221
|
+
},
|
|
222
|
+
dark: {
|
|
223
|
+
primary: "#60a5fa",
|
|
224
|
+
primaryHover: "#3b82f6",
|
|
225
|
+
primaryLight: "#93c5fd",
|
|
226
|
+
tagBg: "rgba(96, 165, 250, 0.15)",
|
|
227
|
+
shadow: "rgba(59, 130, 246, 0.2)",
|
|
228
|
+
borderHighlight: "rgba(96, 165, 250, 0.2)",
|
|
229
|
+
glassBorder: "rgba(96, 165, 250, 0.1)"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
emerald: {
|
|
233
|
+
light: {
|
|
234
|
+
primary: "#10b981",
|
|
235
|
+
primaryHover: "#059669",
|
|
236
|
+
primaryLight: "#34d399",
|
|
237
|
+
tagBg: "rgba(16, 185, 129, 0.1)",
|
|
238
|
+
shadow: "rgba(16, 185, 129, 0.15)",
|
|
239
|
+
borderHighlight: "rgba(16, 185, 129, 0.2)",
|
|
240
|
+
glassBorder: "rgba(16, 185, 129, 0.1)"
|
|
241
|
+
},
|
|
242
|
+
dark: {
|
|
243
|
+
primary: "#34d399",
|
|
244
|
+
primaryHover: "#10b981",
|
|
245
|
+
primaryLight: "#6ee7b7",
|
|
246
|
+
tagBg: "rgba(52, 211, 153, 0.15)",
|
|
247
|
+
shadow: "rgba(16, 185, 129, 0.2)",
|
|
248
|
+
borderHighlight: "rgba(52, 211, 153, 0.2)",
|
|
249
|
+
glassBorder: "rgba(52, 211, 153, 0.1)"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
rose: {
|
|
253
|
+
light: {
|
|
254
|
+
primary: "#f43f5e",
|
|
255
|
+
primaryHover: "#e11d48",
|
|
256
|
+
primaryLight: "#fb7185",
|
|
257
|
+
tagBg: "rgba(244, 63, 94, 0.1)",
|
|
258
|
+
shadow: "rgba(244, 63, 94, 0.15)",
|
|
259
|
+
borderHighlight: "rgba(244, 63, 94, 0.2)",
|
|
260
|
+
glassBorder: "rgba(244, 63, 94, 0.1)"
|
|
261
|
+
},
|
|
262
|
+
dark: {
|
|
263
|
+
primary: "#fb7185",
|
|
264
|
+
primaryHover: "#f43f5e",
|
|
265
|
+
primaryLight: "#fda4af",
|
|
266
|
+
tagBg: "rgba(251, 113, 133, 0.15)",
|
|
267
|
+
shadow: "rgba(244, 63, 94, 0.2)",
|
|
268
|
+
borderHighlight: "rgba(251, 113, 133, 0.2)",
|
|
269
|
+
glassBorder: "rgba(251, 113, 133, 0.1)"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
amber: {
|
|
273
|
+
light: {
|
|
274
|
+
primary: "#f59e0b",
|
|
275
|
+
primaryHover: "#d97706",
|
|
276
|
+
primaryLight: "#fbbf24",
|
|
277
|
+
tagBg: "rgba(245, 158, 11, 0.1)",
|
|
278
|
+
shadow: "rgba(245, 158, 11, 0.15)",
|
|
279
|
+
borderHighlight: "rgba(245, 158, 11, 0.2)",
|
|
280
|
+
glassBorder: "rgba(245, 158, 11, 0.1)"
|
|
281
|
+
},
|
|
282
|
+
dark: {
|
|
283
|
+
primary: "#fbbf24",
|
|
284
|
+
primaryHover: "#f59e0b",
|
|
285
|
+
primaryLight: "#fcd34d",
|
|
286
|
+
tagBg: "rgba(251, 191, 36, 0.15)",
|
|
287
|
+
shadow: "rgba(245, 158, 11, 0.2)",
|
|
288
|
+
borderHighlight: "rgba(251, 191, 36, 0.2)",
|
|
289
|
+
glassBorder: "rgba(251, 191, 36, 0.1)"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
cyan: {
|
|
293
|
+
light: {
|
|
294
|
+
primary: "#06b6d4",
|
|
295
|
+
primaryHover: "#0891b2",
|
|
296
|
+
primaryLight: "#22d3ee",
|
|
297
|
+
tagBg: "rgba(6, 182, 212, 0.1)",
|
|
298
|
+
shadow: "rgba(6, 182, 212, 0.15)",
|
|
299
|
+
borderHighlight: "rgba(6, 182, 212, 0.2)",
|
|
300
|
+
glassBorder: "rgba(6, 182, 212, 0.1)"
|
|
301
|
+
},
|
|
302
|
+
dark: {
|
|
303
|
+
primary: "#22d3ee",
|
|
304
|
+
primaryHover: "#06b6d4",
|
|
305
|
+
primaryLight: "#67e8f9",
|
|
306
|
+
tagBg: "rgba(34, 211, 238, 0.15)",
|
|
307
|
+
shadow: "rgba(6, 182, 212, 0.2)",
|
|
308
|
+
borderHighlight: "rgba(34, 211, 238, 0.2)",
|
|
309
|
+
glassBorder: "rgba(34, 211, 238, 0.1)"
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
function getColorConfig(preset, customColor) {
|
|
314
|
+
if (preset === "custom" && customColor) {
|
|
315
|
+
const hex = customColor.replace("#", "");
|
|
316
|
+
const r = parseInt(hex.substring(0, 2), 16);
|
|
317
|
+
const g = parseInt(hex.substring(2, 4), 16);
|
|
318
|
+
const b = parseInt(hex.substring(4, 6), 16);
|
|
319
|
+
const lighterR = Math.min(255, r + 40);
|
|
320
|
+
const lighterG = Math.min(255, g + 40);
|
|
321
|
+
const lighterB = Math.min(255, b + 40);
|
|
322
|
+
const lighter = `#${lighterR.toString(16).padStart(2, "0")}${lighterG.toString(16).padStart(2, "0")}${lighterB.toString(16).padStart(2, "0")}`;
|
|
323
|
+
const darkerR = Math.max(0, r - 20);
|
|
324
|
+
const darkerG = Math.max(0, g - 20);
|
|
325
|
+
const darkerB = Math.max(0, b - 20);
|
|
326
|
+
const darker = `#${darkerR.toString(16).padStart(2, "0")}${darkerG.toString(16).padStart(2, "0")}${darkerB.toString(16).padStart(2, "0")}`;
|
|
327
|
+
return {
|
|
328
|
+
light: {
|
|
329
|
+
primary: customColor,
|
|
330
|
+
primaryHover: darker,
|
|
331
|
+
primaryLight: lighter,
|
|
332
|
+
tagBg: `rgba(${r}, ${g}, ${b}, 0.1)`,
|
|
333
|
+
shadow: `rgba(${r}, ${g}, ${b}, 0.15)`,
|
|
334
|
+
borderHighlight: `rgba(${r}, ${g}, ${b}, 0.2)`,
|
|
335
|
+
glassBorder: `rgba(${r}, ${g}, ${b}, 0.1)`
|
|
336
|
+
},
|
|
337
|
+
dark: {
|
|
338
|
+
primary: lighter,
|
|
339
|
+
primaryHover: customColor,
|
|
340
|
+
primaryLight: lighter,
|
|
341
|
+
tagBg: `rgba(${lighterR}, ${lighterG}, ${lighterB}, 0.15)`,
|
|
342
|
+
shadow: `rgba(${r}, ${g}, ${b}, 0.2)`,
|
|
343
|
+
borderHighlight: `rgba(${lighterR}, ${lighterG}, ${lighterB}, 0.2)`,
|
|
344
|
+
glassBorder: `rgba(${lighterR}, ${lighterG}, ${lighterB}, 0.1)`
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
return colorPresets[preset] || colorPresets.violet;
|
|
349
|
+
}
|
|
350
|
+
function applyThemeColors(preset, customColor, isDark = false) {
|
|
351
|
+
const config = getColorConfig(preset, customColor);
|
|
352
|
+
const colors = isDark ? config.dark : config.light;
|
|
353
|
+
document.documentElement.style.setProperty("--primary", colors.primary);
|
|
354
|
+
document.documentElement.style.setProperty("--primary-hover", colors.primaryHover);
|
|
355
|
+
document.documentElement.style.setProperty("--primary-light", colors.primaryLight);
|
|
356
|
+
document.documentElement.style.setProperty("--tag-bg", colors.tagBg);
|
|
357
|
+
document.documentElement.style.setProperty("--shadow", colors.shadow);
|
|
358
|
+
document.documentElement.style.setProperty("--border-highlight", colors.borderHighlight);
|
|
359
|
+
document.documentElement.style.setProperty("--glass-border", colors.glassBorder);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// src/lib/fonts.ts
|
|
363
|
+
var fontPresets = {
|
|
364
|
+
"inter": {
|
|
365
|
+
family: "Inter",
|
|
366
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
367
|
+
},
|
|
368
|
+
"roboto": {
|
|
369
|
+
family: "Roboto",
|
|
370
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
371
|
+
},
|
|
372
|
+
"open-sans": {
|
|
373
|
+
family: "Open Sans",
|
|
374
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
375
|
+
},
|
|
376
|
+
"lato": {
|
|
377
|
+
family: "Lato",
|
|
378
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
379
|
+
},
|
|
380
|
+
"poppins": {
|
|
381
|
+
family: "Poppins",
|
|
382
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
383
|
+
},
|
|
384
|
+
"montserrat": {
|
|
385
|
+
family: "Montserrat",
|
|
386
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
387
|
+
},
|
|
388
|
+
"playfair-display": {
|
|
389
|
+
family: "Playfair Display",
|
|
390
|
+
fallback: "Georgia, 'Times New Roman', serif"
|
|
391
|
+
},
|
|
392
|
+
"source-sans-pro": {
|
|
393
|
+
family: "Source Sans 3",
|
|
394
|
+
fallback: "-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
395
|
+
},
|
|
396
|
+
"merriweather": {
|
|
397
|
+
family: "Merriweather",
|
|
398
|
+
fallback: "Georgia, 'Times New Roman', serif"
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
function getFontFamily(preset) {
|
|
402
|
+
const config = fontPresets[preset] || fontPresets["inter"];
|
|
403
|
+
return `'${config.family}', ${config.fallback}`;
|
|
404
|
+
}
|
|
405
|
+
function applyFonts(headingFont, bodyFont) {
|
|
406
|
+
const heading = headingFont || "inter";
|
|
407
|
+
const body = bodyFont || "inter";
|
|
408
|
+
document.documentElement.style.setProperty("--font-heading", getFontFamily(heading));
|
|
409
|
+
document.documentElement.style.setProperty("--font-body", getFontFamily(body));
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// src/context/SiteSettingsContext.tsx
|
|
413
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
414
|
+
var SiteSettingsContext = createContext2({
|
|
415
|
+
settings: null,
|
|
416
|
+
profile: null
|
|
417
|
+
});
|
|
418
|
+
function SiteSettingsProvider({
|
|
419
|
+
children,
|
|
420
|
+
settings,
|
|
421
|
+
profile
|
|
422
|
+
}) {
|
|
423
|
+
const { theme } = useTheme();
|
|
424
|
+
useEffect2(() => {
|
|
425
|
+
if (settings?.themeColor) {
|
|
426
|
+
applyThemeColors(
|
|
427
|
+
settings.themeColor.preset,
|
|
428
|
+
settings.themeColor.customColor,
|
|
429
|
+
theme === "dark"
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
}, [settings, theme]);
|
|
433
|
+
useEffect2(() => {
|
|
434
|
+
applyFonts(
|
|
435
|
+
settings?.fontFamily?.heading,
|
|
436
|
+
settings?.fontFamily?.body
|
|
437
|
+
);
|
|
438
|
+
}, [settings]);
|
|
439
|
+
return /* @__PURE__ */ jsx3(SiteSettingsContext.Provider, { value: { settings, profile }, children });
|
|
440
|
+
}
|
|
441
|
+
function useSiteSettings() {
|
|
442
|
+
return useContext2(SiteSettingsContext);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// src/components/Experience.tsx
|
|
446
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
14
447
|
var defaultExperiences = [
|
|
15
448
|
{
|
|
16
449
|
_id: "1",
|
|
@@ -53,46 +486,46 @@ function ExperienceSection({ experiences }) {
|
|
|
53
486
|
motion.section,
|
|
54
487
|
{
|
|
55
488
|
id: "cv",
|
|
56
|
-
className:
|
|
489
|
+
className: Experience_default.section,
|
|
57
490
|
initial: "hidden",
|
|
58
491
|
whileInView: "visible",
|
|
59
492
|
viewport: { once: true, amount: 0.1 },
|
|
60
493
|
variants: staggerContainer,
|
|
61
494
|
children: [
|
|
62
|
-
/* @__PURE__ */ jsxs(motion.div, { className:
|
|
63
|
-
/* @__PURE__ */
|
|
495
|
+
/* @__PURE__ */ jsxs(motion.div, { className: Experience_default.header, variants: fadeInUp, children: [
|
|
496
|
+
/* @__PURE__ */ jsx4("h2", { className: Experience_default.title, children: "Experience & Education" }),
|
|
64
497
|
/* @__PURE__ */ jsxs(
|
|
65
498
|
motion.a,
|
|
66
499
|
{
|
|
67
500
|
href: settings?.resumeUrl || "#",
|
|
68
|
-
className:
|
|
501
|
+
className: Experience_default.downloadButton,
|
|
69
502
|
whileHover: hoverLift,
|
|
70
503
|
whileTap: tapScale,
|
|
71
504
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
505
|
+
/* @__PURE__ */ jsx4("span", { className: "material-symbols-outlined", children: "download" }),
|
|
73
506
|
"Download Resume"
|
|
74
507
|
]
|
|
75
508
|
}
|
|
76
509
|
)
|
|
77
510
|
] }),
|
|
78
|
-
/* @__PURE__ */
|
|
511
|
+
/* @__PURE__ */ jsx4("div", { className: Experience_default.timeline, children: displayExperiences.map((exp) => /* @__PURE__ */ jsxs(
|
|
79
512
|
motion.div,
|
|
80
513
|
{
|
|
81
|
-
className:
|
|
514
|
+
className: Experience_default.timelineItem,
|
|
82
515
|
variants: fadeInUp,
|
|
83
516
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
517
|
+
/* @__PURE__ */ jsx4(
|
|
85
518
|
"div",
|
|
86
519
|
{
|
|
87
|
-
className: `${
|
|
520
|
+
className: `${Experience_default.timelineDot} ${exp.isCurrent ? Experience_default.timelineDotCurrent : ""}`
|
|
88
521
|
}
|
|
89
522
|
),
|
|
90
|
-
/* @__PURE__ */ jsxs("div", { className:
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
/* @__PURE__ */
|
|
523
|
+
/* @__PURE__ */ jsxs("div", { className: Experience_default.timelineHeader, children: [
|
|
524
|
+
/* @__PURE__ */ jsx4("h3", { className: Experience_default.timelineTitle, children: exp.title }),
|
|
525
|
+
/* @__PURE__ */ jsx4("span", { className: Experience_default.timelinePeriod, children: exp.period })
|
|
93
526
|
] }),
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
exp.description && /* @__PURE__ */
|
|
527
|
+
/* @__PURE__ */ jsx4("p", { className: Experience_default.timelineOrg, children: exp.organization }),
|
|
528
|
+
exp.description && /* @__PURE__ */ jsx4("p", { className: Experience_default.timelineDescription, children: exp.description })
|
|
96
529
|
]
|
|
97
530
|
},
|
|
98
531
|
exp._id
|
|
@@ -104,22 +537,24 @@ function ExperienceSection({ experiences }) {
|
|
|
104
537
|
|
|
105
538
|
// src/components/Footer.tsx
|
|
106
539
|
import { motion as motion2 } from "framer-motion";
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
540
|
+
|
|
541
|
+
// src/components/Footer.module.css
|
|
542
|
+
var Footer_default = {};
|
|
543
|
+
|
|
544
|
+
// src/components/Footer.tsx
|
|
110
545
|
import { jsxs as jsxs2 } from "react/jsx-runtime";
|
|
111
546
|
function Footer() {
|
|
112
|
-
const { settings, profile } =
|
|
547
|
+
const { settings, profile } = useSiteSettings();
|
|
113
548
|
return /* @__PURE__ */ jsxs2(
|
|
114
549
|
motion2.footer,
|
|
115
550
|
{
|
|
116
|
-
className:
|
|
551
|
+
className: Footer_default.footer,
|
|
117
552
|
initial: "hidden",
|
|
118
553
|
whileInView: "visible",
|
|
119
554
|
viewport: { once: true },
|
|
120
|
-
variants:
|
|
555
|
+
variants: fadeInUp,
|
|
121
556
|
children: [
|
|
122
|
-
/* @__PURE__ */ jsxs2("p", { className:
|
|
557
|
+
/* @__PURE__ */ jsxs2("p", { className: Footer_default.copyright, children: [
|
|
123
558
|
"\xA9 ",
|
|
124
559
|
(/* @__PURE__ */ new Date()).getFullYear(),
|
|
125
560
|
" ",
|
|
@@ -128,7 +563,7 @@ function Footer() {
|
|
|
128
563
|
" ",
|
|
129
564
|
settings?.footerText || "Built with Passion."
|
|
130
565
|
] }),
|
|
131
|
-
/* @__PURE__ */ jsxs2("p", { className:
|
|
566
|
+
/* @__PURE__ */ jsxs2("p", { className: Footer_default.updated, children: [
|
|
132
567
|
"Last updated: ",
|
|
133
568
|
(/* @__PURE__ */ new Date()).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" })
|
|
134
569
|
] })
|
|
@@ -138,14 +573,15 @@ function Footer() {
|
|
|
138
573
|
}
|
|
139
574
|
|
|
140
575
|
// src/components/Header.tsx
|
|
141
|
-
import { useState } from "react";
|
|
576
|
+
import { useState as useState2 } from "react";
|
|
142
577
|
import Link from "next/link";
|
|
143
578
|
import { motion as motion3, AnimatePresence } from "framer-motion";
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
579
|
+
|
|
580
|
+
// src/components/Header.module.css
|
|
581
|
+
var Header_default = {};
|
|
582
|
+
|
|
583
|
+
// src/components/Header.tsx
|
|
584
|
+
import { Fragment, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
149
585
|
var navLinks = [
|
|
150
586
|
{ href: "#about", label: "About" },
|
|
151
587
|
{ href: "#publications", label: "Publications" },
|
|
@@ -154,42 +590,42 @@ var navLinks = [
|
|
|
154
590
|
];
|
|
155
591
|
function Header() {
|
|
156
592
|
const { theme, toggleTheme } = useTheme();
|
|
157
|
-
const { settings, profile } =
|
|
158
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
593
|
+
const { settings, profile } = useSiteSettings();
|
|
594
|
+
const [mobileMenuOpen, setMobileMenuOpen] = useState2(false);
|
|
159
595
|
const socialLinks = settings?.socialLinks;
|
|
160
596
|
const contactEmail = settings?.contactEmail;
|
|
161
|
-
return /* @__PURE__ */ jsxs3("header", { className:
|
|
162
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
163
|
-
/* @__PURE__ */ jsxs3(Link, { href: "/", className:
|
|
164
|
-
/* @__PURE__ */
|
|
165
|
-
/* @__PURE__ */
|
|
597
|
+
return /* @__PURE__ */ jsxs3("header", { className: Header_default.header, children: [
|
|
598
|
+
/* @__PURE__ */ jsxs3("div", { className: Header_default.container, children: [
|
|
599
|
+
/* @__PURE__ */ jsxs3(Link, { href: "/", className: Header_default.logo, children: [
|
|
600
|
+
/* @__PURE__ */ jsx5("span", { className: Header_default.logoName, children: profile?.name || "David" }),
|
|
601
|
+
/* @__PURE__ */ jsx5("span", { className: Header_default.logoTitle, children: profile?.title || "PhD Candidate" })
|
|
166
602
|
] }),
|
|
167
|
-
/* @__PURE__ */
|
|
603
|
+
/* @__PURE__ */ jsx5("nav", { className: Header_default.nav, children: navLinks.map((link) => /* @__PURE__ */ jsxs3(Link, { href: link.href, className: Header_default.navLink, children: [
|
|
168
604
|
link.label,
|
|
169
|
-
/* @__PURE__ */
|
|
605
|
+
/* @__PURE__ */ jsx5("span", { className: Header_default.navLinkUnderline })
|
|
170
606
|
] }, link.href)) }),
|
|
171
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
172
|
-
/* @__PURE__ */ jsxs3("div", { className:
|
|
173
|
-
(socialLinks?.twitter || !settings) && /* @__PURE__ */
|
|
607
|
+
/* @__PURE__ */ jsxs3("div", { className: Header_default.actions, children: [
|
|
608
|
+
/* @__PURE__ */ jsxs3("div", { className: Header_default.socialLinks, children: [
|
|
609
|
+
(socialLinks?.twitter || !settings) && /* @__PURE__ */ jsx5(
|
|
174
610
|
"a",
|
|
175
611
|
{
|
|
176
612
|
href: socialLinks?.twitter || "https://twitter.com",
|
|
177
613
|
target: "_blank",
|
|
178
614
|
rel: "noopener noreferrer",
|
|
179
|
-
className:
|
|
615
|
+
className: Header_default.socialLink,
|
|
180
616
|
"aria-label": "Twitter",
|
|
181
|
-
children: /* @__PURE__ */
|
|
617
|
+
children: /* @__PURE__ */ jsx5("svg", { fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx5("path", { d: "M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" }) })
|
|
182
618
|
}
|
|
183
619
|
),
|
|
184
|
-
(socialLinks?.github || !settings) && /* @__PURE__ */
|
|
620
|
+
(socialLinks?.github || !settings) && /* @__PURE__ */ jsx5(
|
|
185
621
|
"a",
|
|
186
622
|
{
|
|
187
623
|
href: socialLinks?.github || "https://github.com",
|
|
188
624
|
target: "_blank",
|
|
189
625
|
rel: "noopener noreferrer",
|
|
190
|
-
className:
|
|
626
|
+
className: Header_default.socialLink,
|
|
191
627
|
"aria-label": "GitHub",
|
|
192
|
-
children: /* @__PURE__ */
|
|
628
|
+
children: /* @__PURE__ */ jsx5("svg", { fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx5(
|
|
193
629
|
"path",
|
|
194
630
|
{
|
|
195
631
|
fillRule: "evenodd",
|
|
@@ -199,15 +635,15 @@ function Header() {
|
|
|
199
635
|
) })
|
|
200
636
|
}
|
|
201
637
|
),
|
|
202
|
-
(socialLinks?.linkedin || !settings) && /* @__PURE__ */
|
|
638
|
+
(socialLinks?.linkedin || !settings) && /* @__PURE__ */ jsx5(
|
|
203
639
|
"a",
|
|
204
640
|
{
|
|
205
641
|
href: socialLinks?.linkedin || "https://linkedin.com",
|
|
206
642
|
target: "_blank",
|
|
207
643
|
rel: "noopener noreferrer",
|
|
208
|
-
className:
|
|
644
|
+
className: Header_default.socialLink,
|
|
209
645
|
"aria-label": "LinkedIn",
|
|
210
|
-
children: /* @__PURE__ */
|
|
646
|
+
children: /* @__PURE__ */ jsx5("svg", { fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx5(
|
|
211
647
|
"path",
|
|
212
648
|
{
|
|
213
649
|
fillRule: "evenodd",
|
|
@@ -218,13 +654,13 @@ function Header() {
|
|
|
218
654
|
}
|
|
219
655
|
)
|
|
220
656
|
] }),
|
|
221
|
-
/* @__PURE__ */
|
|
657
|
+
/* @__PURE__ */ jsx5(
|
|
222
658
|
motion3.button,
|
|
223
659
|
{
|
|
224
|
-
className:
|
|
660
|
+
className: Header_default.themeToggle,
|
|
225
661
|
onClick: toggleTheme,
|
|
226
|
-
whileHover:
|
|
227
|
-
whileTap:
|
|
662
|
+
whileHover: hoverLift,
|
|
663
|
+
whileTap: tapScale,
|
|
228
664
|
"aria-label": `Switch to ${theme === "dark" ? "light" : "dark"} mode`,
|
|
229
665
|
children: theme === "dark" ? /* @__PURE__ */ jsxs3(
|
|
230
666
|
"svg",
|
|
@@ -239,18 +675,18 @@ function Header() {
|
|
|
239
675
|
strokeLinecap: "round",
|
|
240
676
|
strokeLinejoin: "round",
|
|
241
677
|
children: [
|
|
242
|
-
/* @__PURE__ */
|
|
243
|
-
/* @__PURE__ */
|
|
244
|
-
/* @__PURE__ */
|
|
245
|
-
/* @__PURE__ */
|
|
246
|
-
/* @__PURE__ */
|
|
247
|
-
/* @__PURE__ */
|
|
248
|
-
/* @__PURE__ */
|
|
249
|
-
/* @__PURE__ */
|
|
250
|
-
/* @__PURE__ */
|
|
678
|
+
/* @__PURE__ */ jsx5("circle", { cx: "12", cy: "12", r: "5" }),
|
|
679
|
+
/* @__PURE__ */ jsx5("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
|
|
680
|
+
/* @__PURE__ */ jsx5("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
|
|
681
|
+
/* @__PURE__ */ jsx5("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
|
|
682
|
+
/* @__PURE__ */ jsx5("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
|
|
683
|
+
/* @__PURE__ */ jsx5("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
|
|
684
|
+
/* @__PURE__ */ jsx5("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
|
|
685
|
+
/* @__PURE__ */ jsx5("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }),
|
|
686
|
+
/* @__PURE__ */ jsx5("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })
|
|
251
687
|
]
|
|
252
688
|
}
|
|
253
|
-
) : /* @__PURE__ */
|
|
689
|
+
) : /* @__PURE__ */ jsx5(
|
|
254
690
|
"svg",
|
|
255
691
|
{
|
|
256
692
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -262,7 +698,7 @@ function Header() {
|
|
|
262
698
|
strokeWidth: "2",
|
|
263
699
|
strokeLinecap: "round",
|
|
264
700
|
strokeLinejoin: "round",
|
|
265
|
-
children: /* @__PURE__ */
|
|
701
|
+
children: /* @__PURE__ */ jsx5("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" })
|
|
266
702
|
}
|
|
267
703
|
)
|
|
268
704
|
}
|
|
@@ -271,22 +707,22 @@ function Header() {
|
|
|
271
707
|
motion3.a,
|
|
272
708
|
{
|
|
273
709
|
href: contactEmail ? `mailto:${contactEmail}` : "mailto:contact@example.com",
|
|
274
|
-
className:
|
|
275
|
-
whileHover:
|
|
276
|
-
whileTap:
|
|
710
|
+
className: Header_default.contactButton,
|
|
711
|
+
whileHover: hoverLift,
|
|
712
|
+
whileTap: tapScale,
|
|
277
713
|
children: [
|
|
278
|
-
/* @__PURE__ */
|
|
279
|
-
/* @__PURE__ */
|
|
714
|
+
/* @__PURE__ */ jsx5("span", { className: `material-symbols-outlined ${Header_default.contactButtonIcon}`, children: "mail" }),
|
|
715
|
+
/* @__PURE__ */ jsx5("span", { className: Header_default.contactButtonText, children: "Contact" })
|
|
280
716
|
]
|
|
281
717
|
}
|
|
282
718
|
),
|
|
283
|
-
/* @__PURE__ */
|
|
719
|
+
/* @__PURE__ */ jsx5(
|
|
284
720
|
"button",
|
|
285
721
|
{
|
|
286
|
-
className:
|
|
722
|
+
className: Header_default.mobileMenuButton,
|
|
287
723
|
onClick: () => setMobileMenuOpen(!mobileMenuOpen),
|
|
288
724
|
"aria-label": "Toggle menu",
|
|
289
|
-
children: /* @__PURE__ */
|
|
725
|
+
children: /* @__PURE__ */ jsx5(
|
|
290
726
|
"svg",
|
|
291
727
|
{
|
|
292
728
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -299,12 +735,12 @@ function Header() {
|
|
|
299
735
|
strokeLinecap: "round",
|
|
300
736
|
strokeLinejoin: "round",
|
|
301
737
|
children: mobileMenuOpen ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
302
|
-
/* @__PURE__ */
|
|
303
|
-
/* @__PURE__ */
|
|
738
|
+
/* @__PURE__ */ jsx5("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
739
|
+
/* @__PURE__ */ jsx5("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
304
740
|
] }) : /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
305
|
-
/* @__PURE__ */
|
|
306
|
-
/* @__PURE__ */
|
|
307
|
-
/* @__PURE__ */
|
|
741
|
+
/* @__PURE__ */ jsx5("line", { x1: "3", y1: "12", x2: "21", y2: "12" }),
|
|
742
|
+
/* @__PURE__ */ jsx5("line", { x1: "3", y1: "6", x2: "21", y2: "6" }),
|
|
743
|
+
/* @__PURE__ */ jsx5("line", { x1: "3", y1: "18", x2: "21", y2: "18" })
|
|
308
744
|
] })
|
|
309
745
|
}
|
|
310
746
|
)
|
|
@@ -312,19 +748,19 @@ function Header() {
|
|
|
312
748
|
)
|
|
313
749
|
] })
|
|
314
750
|
] }),
|
|
315
|
-
/* @__PURE__ */
|
|
751
|
+
/* @__PURE__ */ jsx5(AnimatePresence, { children: mobileMenuOpen && /* @__PURE__ */ jsx5(
|
|
316
752
|
motion3.nav,
|
|
317
753
|
{
|
|
318
|
-
className:
|
|
754
|
+
className: Header_default.mobileNav,
|
|
319
755
|
initial: { opacity: 0, y: -10 },
|
|
320
756
|
animate: { opacity: 1, y: 0 },
|
|
321
757
|
exit: { opacity: 0, y: -10 },
|
|
322
758
|
transition: { duration: 0.2 },
|
|
323
|
-
children: navLinks.map((link) => /* @__PURE__ */
|
|
759
|
+
children: navLinks.map((link) => /* @__PURE__ */ jsx5(
|
|
324
760
|
Link,
|
|
325
761
|
{
|
|
326
762
|
href: link.href,
|
|
327
|
-
className:
|
|
763
|
+
className: Header_default.mobileNavLink,
|
|
328
764
|
onClick: () => setMobileMenuOpen(false),
|
|
329
765
|
children: link.label
|
|
330
766
|
},
|
|
@@ -338,11 +774,46 @@ function Header() {
|
|
|
338
774
|
// src/components/Hero.tsx
|
|
339
775
|
import { motion as motion4 } from "framer-motion";
|
|
340
776
|
import { PortableText } from "@portabletext/react";
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
777
|
+
|
|
778
|
+
// src/components/Hero.module.css
|
|
779
|
+
var Hero_default = {};
|
|
780
|
+
|
|
781
|
+
// src/lib/sanity.ts
|
|
782
|
+
import imageUrlBuilder from "@sanity/image-url";
|
|
783
|
+
var builder = null;
|
|
784
|
+
function configureSanityClient(client) {
|
|
785
|
+
builder = imageUrlBuilder({
|
|
786
|
+
projectId: client.projectId,
|
|
787
|
+
dataset: client.dataset
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
function urlFor(source) {
|
|
791
|
+
if (!source) {
|
|
792
|
+
return {
|
|
793
|
+
width: () => ({ height: () => ({ url: () => "" }), url: () => "" }),
|
|
794
|
+
height: () => ({ width: () => ({ url: () => "" }), url: () => "" }),
|
|
795
|
+
url: () => ""
|
|
796
|
+
};
|
|
797
|
+
}
|
|
798
|
+
if (!builder) {
|
|
799
|
+
const projectId = typeof window !== "undefined" ? window.__SANITY_PROJECT_ID__ : process.env.NEXT_PUBLIC_SANITY_PROJECT_ID;
|
|
800
|
+
const dataset = typeof window !== "undefined" ? window.__SANITY_DATASET__ : process.env.NEXT_PUBLIC_SANITY_DATASET || "production";
|
|
801
|
+
if (projectId) {
|
|
802
|
+
builder = imageUrlBuilder({ projectId, dataset: dataset || "production" });
|
|
803
|
+
} else {
|
|
804
|
+
console.warn("Sanity client not configured. Call configureSanityClient() or set NEXT_PUBLIC_SANITY_PROJECT_ID");
|
|
805
|
+
return {
|
|
806
|
+
width: () => ({ height: () => ({ url: () => "" }), url: () => "" }),
|
|
807
|
+
height: () => ({ width: () => ({ url: () => "" }), url: () => "" }),
|
|
808
|
+
url: () => ""
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
return builder.image(source);
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// src/components/Hero.tsx
|
|
816
|
+
import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
346
817
|
var defaultUpdates = [
|
|
347
818
|
{
|
|
348
819
|
_id: "1",
|
|
@@ -359,17 +830,17 @@ var defaultUpdates = [
|
|
|
359
830
|
];
|
|
360
831
|
var portableTextComponents = {
|
|
361
832
|
marks: {
|
|
362
|
-
strong: ({ children }) => /* @__PURE__ */
|
|
833
|
+
strong: ({ children }) => /* @__PURE__ */ jsx6("strong", { children }),
|
|
363
834
|
highlight: ({ children, value }) => {
|
|
364
835
|
if (value?.style === "underline") {
|
|
365
|
-
return /* @__PURE__ */
|
|
836
|
+
return /* @__PURE__ */ jsx6("span", { className: Hero_default.underline, children });
|
|
366
837
|
}
|
|
367
|
-
return /* @__PURE__ */
|
|
838
|
+
return /* @__PURE__ */ jsx6("strong", { children });
|
|
368
839
|
}
|
|
369
840
|
}
|
|
370
841
|
};
|
|
371
842
|
function Hero({ updates }) {
|
|
372
|
-
const { settings, profile } =
|
|
843
|
+
const { settings, profile } = useSiteSettings();
|
|
373
844
|
const displayUpdates = updates.length > 0 ? updates : defaultUpdates;
|
|
374
845
|
const formatDate = (dateString) => {
|
|
375
846
|
const date = new Date(dateString);
|
|
@@ -380,77 +851,77 @@ function Hero({ updates }) {
|
|
|
380
851
|
motion4.section,
|
|
381
852
|
{
|
|
382
853
|
id: "about",
|
|
383
|
-
className:
|
|
854
|
+
className: Hero_default.hero,
|
|
384
855
|
initial: "hidden",
|
|
385
856
|
whileInView: "visible",
|
|
386
857
|
viewport: { once: true, amount: 0.1 },
|
|
387
|
-
variants:
|
|
858
|
+
variants: staggerContainer,
|
|
388
859
|
children: [
|
|
389
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
390
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
391
|
-
/* @__PURE__ */
|
|
860
|
+
/* @__PURE__ */ jsxs4("div", { className: Hero_default.content, children: [
|
|
861
|
+
/* @__PURE__ */ jsxs4("div", { className: Hero_default.imageWrapper, children: [
|
|
862
|
+
/* @__PURE__ */ jsx6(
|
|
392
863
|
motion4.div,
|
|
393
864
|
{
|
|
394
|
-
className:
|
|
865
|
+
className: Hero_default.profileImage,
|
|
395
866
|
style: {
|
|
396
867
|
backgroundImage: `url("${profileImageUrl}")`
|
|
397
868
|
},
|
|
398
869
|
variants: blurFade
|
|
399
870
|
}
|
|
400
871
|
),
|
|
401
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
402
|
-
/* @__PURE__ */
|
|
403
|
-
/* @__PURE__ */ jsxs4("p", { className:
|
|
872
|
+
/* @__PURE__ */ jsxs4("div", { className: Hero_default.mobileInfo, children: [
|
|
873
|
+
/* @__PURE__ */ jsx6("h1", { className: Hero_default.mobileInfoName, children: profile?.name || "David" }),
|
|
874
|
+
/* @__PURE__ */ jsxs4("p", { className: Hero_default.mobileInfoTitle, children: [
|
|
404
875
|
profile?.title || "PhD Candidate",
|
|
405
876
|
" ",
|
|
406
877
|
profile?.institution && `at ${profile.institution}`
|
|
407
878
|
] })
|
|
408
879
|
] })
|
|
409
880
|
] }),
|
|
410
|
-
/* @__PURE__ */ jsxs4(motion4.div, { className:
|
|
881
|
+
/* @__PURE__ */ jsxs4(motion4.div, { className: Hero_default.textContent, variants: staggerContainer, children: [
|
|
411
882
|
/* @__PURE__ */ jsxs4("div", { children: [
|
|
412
|
-
profile?.availabilityBadge && /* @__PURE__ */
|
|
413
|
-
!profile?.availabilityBadge && /* @__PURE__ */
|
|
414
|
-
/* @__PURE__ */
|
|
883
|
+
profile?.availabilityBadge && /* @__PURE__ */ jsx6(motion4.span, { className: Hero_default.badge, variants: fadeInUp, children: profile.availabilityBadge }),
|
|
884
|
+
!profile?.availabilityBadge && /* @__PURE__ */ jsx6(motion4.span, { className: Hero_default.badge, variants: fadeInUp, children: "Available for 2024 Roles" }),
|
|
885
|
+
/* @__PURE__ */ jsx6(motion4.h2, { className: Hero_default.headline, variants: fadeInUp, children: profile?.headline ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
415
886
|
profile.headline.beforeHighlight,
|
|
416
887
|
" ",
|
|
417
|
-
/* @__PURE__ */
|
|
888
|
+
/* @__PURE__ */ jsx6("span", { className: Hero_default.highlight, children: profile.headline.highlight }),
|
|
418
889
|
" ",
|
|
419
890
|
profile.headline.afterHighlight
|
|
420
891
|
] }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
421
892
|
"Building the ",
|
|
422
|
-
/* @__PURE__ */
|
|
893
|
+
/* @__PURE__ */ jsx6("span", { className: Hero_default.highlight, children: "future of AI" }),
|
|
423
894
|
" ",
|
|
424
895
|
"with robust & scalable vision systems."
|
|
425
896
|
] }) })
|
|
426
897
|
] }),
|
|
427
|
-
/* @__PURE__ */
|
|
898
|
+
/* @__PURE__ */ jsx6(motion4.div, { className: Hero_default.description, variants: fadeInUp, children: profile?.bio ? /* @__PURE__ */ jsx6(PortableText, { value: profile.bio, components: portableTextComponents }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
428
899
|
/* @__PURE__ */ jsxs4("p", { children: [
|
|
429
900
|
"I am a PhD candidate specializing in",
|
|
430
901
|
" ",
|
|
431
|
-
/* @__PURE__ */
|
|
902
|
+
/* @__PURE__ */ jsx6("strong", { children: "Computer Vision" }),
|
|
432
903
|
" and",
|
|
433
904
|
" ",
|
|
434
|
-
/* @__PURE__ */
|
|
905
|
+
/* @__PURE__ */ jsx6("strong", { children: "Machine Learning" }),
|
|
435
906
|
". My research focuses on self-supervised learning, generative models, and their applications in medical imaging and autonomous systems."
|
|
436
907
|
] }),
|
|
437
908
|
/* @__PURE__ */ jsxs4("p", { children: [
|
|
438
909
|
"Previously, I interned at",
|
|
439
910
|
" ",
|
|
440
|
-
/* @__PURE__ */
|
|
911
|
+
/* @__PURE__ */ jsx6("span", { className: Hero_default.underline, children: "Google DeepMind" }),
|
|
441
912
|
" and",
|
|
442
913
|
" ",
|
|
443
|
-
/* @__PURE__ */
|
|
914
|
+
/* @__PURE__ */ jsx6("span", { className: Hero_default.underline, children: "Meta AI" }),
|
|
444
915
|
". I am passionate about open-source and making AI accessible to everyone."
|
|
445
916
|
] })
|
|
446
917
|
] }) }),
|
|
447
|
-
/* @__PURE__ */ jsxs4(motion4.div, { className:
|
|
448
|
-
/* @__PURE__ */ jsxs4("a", { href: settings?.resumeUrl || "#", className:
|
|
449
|
-
/* @__PURE__ */
|
|
918
|
+
/* @__PURE__ */ jsxs4(motion4.div, { className: Hero_default.links, variants: fadeInUp, children: [
|
|
919
|
+
/* @__PURE__ */ jsxs4("a", { href: settings?.resumeUrl || "#", className: Hero_default.link, children: [
|
|
920
|
+
/* @__PURE__ */ jsx6("span", { className: `material-symbols-outlined ${Hero_default.linkIcon}`, children: "download" }),
|
|
450
921
|
"Download CV"
|
|
451
922
|
] }),
|
|
452
|
-
/* @__PURE__ */ jsxs4("a", { href: settings?.socialLinks?.googleScholar || "#", className:
|
|
453
|
-
/* @__PURE__ */
|
|
923
|
+
/* @__PURE__ */ jsxs4("a", { href: settings?.socialLinks?.googleScholar || "#", className: Hero_default.link, children: [
|
|
924
|
+
/* @__PURE__ */ jsx6("span", { className: `material-symbols-outlined ${Hero_default.linkIcon}`, children: "school" }),
|
|
454
925
|
"Google Scholar"
|
|
455
926
|
] })
|
|
456
927
|
] })
|
|
@@ -459,23 +930,23 @@ function Hero({ updates }) {
|
|
|
459
930
|
/* @__PURE__ */ jsxs4(
|
|
460
931
|
motion4.div,
|
|
461
932
|
{
|
|
462
|
-
className: `glass-panel ${
|
|
463
|
-
variants:
|
|
933
|
+
className: `glass-panel ${Hero_default.updates}`,
|
|
934
|
+
variants: fadeInUp,
|
|
464
935
|
children: [
|
|
465
|
-
/* @__PURE__ */ jsxs4("h3", { className:
|
|
466
|
-
/* @__PURE__ */
|
|
936
|
+
/* @__PURE__ */ jsxs4("h3", { className: Hero_default.updatesHeader, children: [
|
|
937
|
+
/* @__PURE__ */ jsx6("span", { className: `material-symbols-outlined ${Hero_default.updatesIcon}`, children: "campaign" }),
|
|
467
938
|
"Latest Updates"
|
|
468
939
|
] }),
|
|
469
|
-
/* @__PURE__ */
|
|
940
|
+
/* @__PURE__ */ jsx6("div", { className: Hero_default.updatesList, children: displayUpdates.map((update) => /* @__PURE__ */ jsxs4(
|
|
470
941
|
motion4.div,
|
|
471
942
|
{
|
|
472
|
-
className:
|
|
473
|
-
variants:
|
|
943
|
+
className: Hero_default.updateItem,
|
|
944
|
+
variants: fadeInUp,
|
|
474
945
|
children: [
|
|
475
|
-
/* @__PURE__ */
|
|
476
|
-
/* @__PURE__ */ jsxs4("div", { className:
|
|
477
|
-
/* @__PURE__ */
|
|
478
|
-
/* @__PURE__ */
|
|
946
|
+
/* @__PURE__ */ jsx6("div", { className: Hero_default.updateDate, children: formatDate(update.date) }),
|
|
947
|
+
/* @__PURE__ */ jsxs4("div", { className: Hero_default.updateContent, children: [
|
|
948
|
+
/* @__PURE__ */ jsx6("h4", { children: update.title }),
|
|
949
|
+
/* @__PURE__ */ jsx6("p", { children: update.description })
|
|
479
950
|
] })
|
|
480
951
|
]
|
|
481
952
|
},
|
|
@@ -492,10 +963,12 @@ function Hero({ updates }) {
|
|
|
492
963
|
// src/components/Projects.tsx
|
|
493
964
|
import Link2 from "next/link";
|
|
494
965
|
import { motion as motion5 } from "framer-motion";
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
966
|
+
|
|
967
|
+
// src/components/Projects.module.css
|
|
968
|
+
var Projects_default = {};
|
|
969
|
+
|
|
970
|
+
// src/components/Projects.tsx
|
|
971
|
+
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
499
972
|
var defaultProjects = [
|
|
500
973
|
{
|
|
501
974
|
_id: "1",
|
|
@@ -520,7 +993,7 @@ function Projects({ projects }) {
|
|
|
520
993
|
const displayProjects = projects.length > 0 ? projects : defaultProjects;
|
|
521
994
|
const getProjectImage = (project, index) => {
|
|
522
995
|
if (project.image) {
|
|
523
|
-
return
|
|
996
|
+
return urlFor(project.image).width(800).height(450).url();
|
|
524
997
|
}
|
|
525
998
|
return defaultImages[index % defaultImages.length];
|
|
526
999
|
};
|
|
@@ -528,29 +1001,29 @@ function Projects({ projects }) {
|
|
|
528
1001
|
motion5.section,
|
|
529
1002
|
{
|
|
530
1003
|
id: "projects",
|
|
531
|
-
className:
|
|
1004
|
+
className: Projects_default.section,
|
|
532
1005
|
initial: "hidden",
|
|
533
1006
|
whileInView: "visible",
|
|
534
1007
|
viewport: { once: true, amount: 0.1 },
|
|
535
|
-
variants:
|
|
1008
|
+
variants: staggerContainer,
|
|
536
1009
|
children: [
|
|
537
|
-
/* @__PURE__ */
|
|
538
|
-
/* @__PURE__ */
|
|
539
|
-
/* @__PURE__ */
|
|
1010
|
+
/* @__PURE__ */ jsx7(motion5.h2, { className: Projects_default.title, variants: fadeInUp, children: "Selected Projects" }),
|
|
1011
|
+
/* @__PURE__ */ jsx7("div", { className: Projects_default.grid, children: displayProjects.map((project, index) => /* @__PURE__ */ jsx7(motion5.div, { variants: fadeInUp, children: /* @__PURE__ */ jsxs5(Link2, { href: `/projects/${project.slug}`, className: Projects_default.card, children: [
|
|
1012
|
+
/* @__PURE__ */ jsx7(
|
|
540
1013
|
"div",
|
|
541
1014
|
{
|
|
542
|
-
className:
|
|
1015
|
+
className: Projects_default.cardImage,
|
|
543
1016
|
style: { backgroundImage: `url('${getProjectImage(project, index)}')` },
|
|
544
|
-
children: /* @__PURE__ */
|
|
1017
|
+
children: /* @__PURE__ */ jsx7("div", { className: Projects_default.cardImageOverlay })
|
|
545
1018
|
}
|
|
546
1019
|
),
|
|
547
|
-
/* @__PURE__ */ jsxs5("div", { className:
|
|
548
|
-
/* @__PURE__ */ jsxs5("div", { className:
|
|
549
|
-
/* @__PURE__ */
|
|
550
|
-
/* @__PURE__ */
|
|
1020
|
+
/* @__PURE__ */ jsxs5("div", { className: Projects_default.cardContent, children: [
|
|
1021
|
+
/* @__PURE__ */ jsxs5("div", { className: Projects_default.cardHeader, children: [
|
|
1022
|
+
/* @__PURE__ */ jsx7("h3", { className: Projects_default.cardTitle, children: project.title }),
|
|
1023
|
+
/* @__PURE__ */ jsx7("span", { className: Projects_default.cardLink, children: /* @__PURE__ */ jsx7("span", { className: "material-symbols-outlined", children: "open_in_new" }) })
|
|
551
1024
|
] }),
|
|
552
|
-
/* @__PURE__ */
|
|
553
|
-
/* @__PURE__ */
|
|
1025
|
+
/* @__PURE__ */ jsx7("p", { className: Projects_default.cardDescription, children: project.shortDescription }),
|
|
1026
|
+
/* @__PURE__ */ jsx7("div", { className: Projects_default.cardTags, children: project.tags?.map((tag) => /* @__PURE__ */ jsx7("span", { className: Projects_default.tag, children: tag }, tag)) })
|
|
554
1027
|
] })
|
|
555
1028
|
] }) }, project._id)) })
|
|
556
1029
|
]
|
|
@@ -560,10 +1033,12 @@ function Projects({ projects }) {
|
|
|
560
1033
|
|
|
561
1034
|
// src/components/Publications.tsx
|
|
562
1035
|
import { motion as motion6 } from "framer-motion";
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
1036
|
+
|
|
1037
|
+
// src/components/Publications.module.css
|
|
1038
|
+
var Publications_default = {};
|
|
1039
|
+
|
|
1040
|
+
// src/components/Publications.tsx
|
|
1041
|
+
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
567
1042
|
var defaultPublications = [
|
|
568
1043
|
{
|
|
569
1044
|
_id: "1",
|
|
@@ -604,11 +1079,11 @@ var defaultPublications = [
|
|
|
604
1079
|
}
|
|
605
1080
|
];
|
|
606
1081
|
function Publications({ publications }) {
|
|
607
|
-
const { settings } =
|
|
1082
|
+
const { settings } = useSiteSettings();
|
|
608
1083
|
const displayPublications = publications.length > 0 ? publications : defaultPublications;
|
|
609
1084
|
const renderAuthors = (authors) => {
|
|
610
1085
|
return authors.map((author, index) => /* @__PURE__ */ jsxs6("span", { children: [
|
|
611
|
-
author.isMe ? /* @__PURE__ */
|
|
1086
|
+
author.isMe ? /* @__PURE__ */ jsx8("span", { className: Publications_default.cardAuthorHighlight, children: author.name }) : author.name,
|
|
612
1087
|
index < authors.length - 1 && ", "
|
|
613
1088
|
] }, index));
|
|
614
1089
|
};
|
|
@@ -616,34 +1091,34 @@ function Publications({ publications }) {
|
|
|
616
1091
|
motion6.section,
|
|
617
1092
|
{
|
|
618
1093
|
id: "publications",
|
|
619
|
-
className:
|
|
1094
|
+
className: Publications_default.section,
|
|
620
1095
|
initial: "hidden",
|
|
621
1096
|
whileInView: "visible",
|
|
622
1097
|
viewport: { once: true, amount: 0.1 },
|
|
623
|
-
variants:
|
|
1098
|
+
variants: staggerContainer,
|
|
624
1099
|
children: [
|
|
625
|
-
/* @__PURE__ */ jsxs6(motion6.div, { className:
|
|
626
|
-
/* @__PURE__ */
|
|
627
|
-
/* @__PURE__ */
|
|
1100
|
+
/* @__PURE__ */ jsxs6(motion6.div, { className: Publications_default.header, variants: fadeInUp, children: [
|
|
1101
|
+
/* @__PURE__ */ jsx8("h2", { className: Publications_default.title, children: "Publications" }),
|
|
1102
|
+
/* @__PURE__ */ jsx8("a", { href: settings?.socialLinks?.googleScholar || "#", className: Publications_default.scholarLink, children: "View Google Scholar ->" })
|
|
628
1103
|
] }),
|
|
629
|
-
/* @__PURE__ */
|
|
1104
|
+
/* @__PURE__ */ jsx8("div", { className: Publications_default.list, children: displayPublications.map((pub) => /* @__PURE__ */ jsx8(
|
|
630
1105
|
motion6.div,
|
|
631
1106
|
{
|
|
632
|
-
className:
|
|
633
|
-
variants:
|
|
1107
|
+
className: Publications_default.card,
|
|
1108
|
+
variants: fadeInUp,
|
|
634
1109
|
whileHover: { y: -2 },
|
|
635
1110
|
transition: { duration: 0.2 },
|
|
636
|
-
children: /* @__PURE__ */ jsxs6("div", { className:
|
|
637
|
-
/* @__PURE__ */ jsxs6("div", { className:
|
|
638
|
-
/* @__PURE__ */
|
|
639
|
-
/* @__PURE__ */
|
|
640
|
-
/* @__PURE__ */ jsxs6("div", { className:
|
|
641
|
-
/* @__PURE__ */
|
|
642
|
-
pub.highlight && /* @__PURE__ */ jsxs6("span", { className:
|
|
643
|
-
/* @__PURE__ */
|
|
1111
|
+
children: /* @__PURE__ */ jsxs6("div", { className: Publications_default.cardContent, children: [
|
|
1112
|
+
/* @__PURE__ */ jsxs6("div", { className: Publications_default.cardInfo, children: [
|
|
1113
|
+
/* @__PURE__ */ jsx8("h3", { className: Publications_default.cardTitle, children: pub.title }),
|
|
1114
|
+
/* @__PURE__ */ jsx8("p", { className: Publications_default.cardAuthors, children: renderAuthors(pub.authors) }),
|
|
1115
|
+
/* @__PURE__ */ jsxs6("div", { className: Publications_default.cardMeta, children: [
|
|
1116
|
+
/* @__PURE__ */ jsx8("span", { className: Publications_default.cardVenue, children: pub.venue }),
|
|
1117
|
+
pub.highlight && /* @__PURE__ */ jsxs6("span", { className: Publications_default.cardHighlight, children: [
|
|
1118
|
+
/* @__PURE__ */ jsx8(
|
|
644
1119
|
"span",
|
|
645
1120
|
{
|
|
646
|
-
className: `material-symbols-outlined ${
|
|
1121
|
+
className: `material-symbols-outlined ${Publications_default.cardHighlightIcon}`,
|
|
647
1122
|
children: "star"
|
|
648
1123
|
}
|
|
649
1124
|
),
|
|
@@ -651,22 +1126,22 @@ function Publications({ publications }) {
|
|
|
651
1126
|
] })
|
|
652
1127
|
] })
|
|
653
1128
|
] }),
|
|
654
|
-
/* @__PURE__ */ jsxs6("div", { className:
|
|
655
|
-
(pub.pdfUrl || pub.pdfFileUrl) && /* @__PURE__ */ jsxs6("a", { href: pub.pdfUrl || pub.pdfFileUrl, className:
|
|
656
|
-
/* @__PURE__ */
|
|
1129
|
+
/* @__PURE__ */ jsxs6("div", { className: Publications_default.cardActions, children: [
|
|
1130
|
+
(pub.pdfUrl || pub.pdfFileUrl) && /* @__PURE__ */ jsxs6("a", { href: pub.pdfUrl || pub.pdfFileUrl, className: Publications_default.actionButton, children: [
|
|
1131
|
+
/* @__PURE__ */ jsx8(
|
|
657
1132
|
"span",
|
|
658
1133
|
{
|
|
659
|
-
className: `material-symbols-outlined ${
|
|
1134
|
+
className: `material-symbols-outlined ${Publications_default.actionIcon}`,
|
|
660
1135
|
children: "picture_as_pdf"
|
|
661
1136
|
}
|
|
662
1137
|
),
|
|
663
1138
|
"PDF"
|
|
664
1139
|
] }),
|
|
665
|
-
pub.codeUrl && /* @__PURE__ */ jsxs6("a", { href: pub.codeUrl, className:
|
|
666
|
-
/* @__PURE__ */
|
|
1140
|
+
pub.codeUrl && /* @__PURE__ */ jsxs6("a", { href: pub.codeUrl, className: Publications_default.actionButton, children: [
|
|
1141
|
+
/* @__PURE__ */ jsx8(
|
|
667
1142
|
"span",
|
|
668
1143
|
{
|
|
669
|
-
className: `material-symbols-outlined ${
|
|
1144
|
+
className: `material-symbols-outlined ${Publications_default.actionIcon}`,
|
|
670
1145
|
children: "code"
|
|
671
1146
|
}
|
|
672
1147
|
),
|
|
@@ -681,12 +1156,54 @@ function Publications({ publications }) {
|
|
|
681
1156
|
}
|
|
682
1157
|
);
|
|
683
1158
|
}
|
|
1159
|
+
|
|
1160
|
+
// src/components/HomePage.tsx
|
|
1161
|
+
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1162
|
+
function HomePage({
|
|
1163
|
+
updates = [],
|
|
1164
|
+
experiences = [],
|
|
1165
|
+
projects = [],
|
|
1166
|
+
publications = []
|
|
1167
|
+
}) {
|
|
1168
|
+
return /* @__PURE__ */ jsxs7(Fragment3, { children: [
|
|
1169
|
+
/* @__PURE__ */ jsx9(Header, {}),
|
|
1170
|
+
/* @__PURE__ */ jsxs7("main", { children: [
|
|
1171
|
+
/* @__PURE__ */ jsx9(Hero, { updates }),
|
|
1172
|
+
/* @__PURE__ */ jsx9(Divider, {}),
|
|
1173
|
+
/* @__PURE__ */ jsx9(ExperienceSection, { experiences }),
|
|
1174
|
+
/* @__PURE__ */ jsx9(Divider, {}),
|
|
1175
|
+
/* @__PURE__ */ jsx9(Projects, { projects }),
|
|
1176
|
+
/* @__PURE__ */ jsx9(Divider, {}),
|
|
1177
|
+
/* @__PURE__ */ jsx9(Publications, { publications })
|
|
1178
|
+
] }),
|
|
1179
|
+
/* @__PURE__ */ jsx9(Footer, {})
|
|
1180
|
+
] });
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
// src/config.ts
|
|
1184
|
+
function defineConfig(config) {
|
|
1185
|
+
return config;
|
|
1186
|
+
}
|
|
684
1187
|
export {
|
|
685
1188
|
Divider,
|
|
686
1189
|
ExperienceSection as Experience,
|
|
687
1190
|
Footer,
|
|
688
1191
|
Header,
|
|
689
1192
|
Hero,
|
|
1193
|
+
HomePage,
|
|
690
1194
|
Projects,
|
|
691
|
-
Publications
|
|
1195
|
+
Publications,
|
|
1196
|
+
SiteSettingsProvider,
|
|
1197
|
+
ThemeProvider,
|
|
1198
|
+
applyFonts,
|
|
1199
|
+
applyThemeColors,
|
|
1200
|
+
colorPresets,
|
|
1201
|
+
configureSanityClient,
|
|
1202
|
+
defineConfig,
|
|
1203
|
+
fontPresets,
|
|
1204
|
+
getColorConfig,
|
|
1205
|
+
getFontFamily,
|
|
1206
|
+
urlFor,
|
|
1207
|
+
useSiteSettings,
|
|
1208
|
+
useTheme
|
|
692
1209
|
};
|