@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/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: styles.about, id: "about", children: /* @__PURE__ */ jsxs("div", { className: styles.card, children: [
28
- /* @__PURE__ */ jsx("div", { className: styles.imageWrapper, children: /* @__PURE__ */ jsx(
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: styles.profileImage,
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: styles.content, children: [
42
+ /* @__PURE__ */ jsxs("div", { className: About_default.content, children: [
41
43
  /* @__PURE__ */ jsxs("div", { children: [
42
- /* @__PURE__ */ jsx("h1", { className: styles.greeting, children: greeting }),
43
- /* @__PURE__ */ jsx("p", { className: styles.title, children: title }),
44
- /* @__PURE__ */ jsx("p", { className: styles.bio, children: bio })
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: styles.socialLinks, children: socialLinks.map((link) => /* @__PURE__ */ jsx(
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: styles.socialLink,
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: styles2.cv, id: "cv", children: /* @__PURE__ */ jsxs2("div", { className: styles2.card, children: [
72
- /* @__PURE__ */ jsxs2("div", { className: styles2.content, children: [
73
- /* @__PURE__ */ jsx2("span", { className: styles2.iconWrapper, children: /* @__PURE__ */ jsx2("span", { className: "material-symbols-outlined", children: "history_edu" }) }),
74
- /* @__PURE__ */ jsxs2("div", { className: styles2.textContent, children: [
75
- /* @__PURE__ */ jsx2("h2", { className: styles2.title, children: heading }),
76
- /* @__PURE__ */ jsx2("p", { className: styles2.description, children: description })
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: styles2.downloadBtn,
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: styles2.downloadBtn, disabled: true, children: [
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: styles2.background })
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: styles3.footer, children: /* @__PURE__ */ jsxs3("div", { className: styles3.content, children: [
104
- /* @__PURE__ */ jsx3("p", { className: styles3.copyright, children: footerText }),
105
- email && /* @__PURE__ */ jsxs3("div", { className: styles3.emailWrapper, children: [
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: styles3.email, children: email })
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
- import styles4 from "@/styles/Header.module.css";
116
- import { useTheme } from "@/context/ThemeContext";
117
- import { Fragment, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
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] = useState(false);
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__ */ jsx4("header", { className: styles4.header, children: /* @__PURE__ */ jsxs4("div", { className: styles4.headerInner, children: [
135
- /* @__PURE__ */ jsxs4(Link, { href: "/", className: styles4.logo, children: [
136
- /* @__PURE__ */ jsx4("div", { className: styles4.logoIcon, children: /* @__PURE__ */ jsx4("span", { className: "material-symbols-outlined", children: "hexagon" }) }),
137
- /* @__PURE__ */ jsx4("h2", { className: styles4.siteName, children: siteName })
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: styles4.desktopNav, children: [
140
- /* @__PURE__ */ jsx4("nav", { className: styles4.navLinks, children: navLinks.map((link) => /* @__PURE__ */ jsx4(
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: styles4.navLink,
190
+ className: Header_default.navLink,
145
191
  children: link.label
146
192
  },
147
193
  link.href
148
194
  )) }),
149
- mounted && /* @__PURE__ */ jsx4(
195
+ mounted && /* @__PURE__ */ jsx5(
150
196
  "button",
151
197
  {
152
- className: styles4.themeToggle,
198
+ className: Header_default.themeToggle,
153
199
  onClick: toggleTheme,
154
200
  "aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
155
- children: /* @__PURE__ */ jsx4("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
201
+ children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
156
202
  }
157
203
  ),
158
- showContactButton && contactEmail && /* @__PURE__ */ jsx4(
204
+ showContactButton && contactEmail && /* @__PURE__ */ jsx5(
159
205
  "a",
160
206
  {
161
207
  href: `mailto:${contactEmail}`,
162
- className: styles4.contactBtn,
163
- children: /* @__PURE__ */ jsx4("span", { children: contactButtonText })
208
+ className: Header_default.contactBtn,
209
+ children: /* @__PURE__ */ jsx5("span", { children: contactButtonText })
164
210
  }
165
211
  )
166
212
  ] }),
167
- /* @__PURE__ */ jsxs4("div", { className: styles4.mobileActions, children: [
168
- mounted && /* @__PURE__ */ jsx4(
213
+ /* @__PURE__ */ jsxs4("div", { className: Header_default.mobileActions, children: [
214
+ mounted && /* @__PURE__ */ jsx5(
169
215
  "button",
170
216
  {
171
- className: styles4.mobileThemeToggle,
217
+ className: Header_default.mobileThemeToggle,
172
218
  onClick: toggleTheme,
173
219
  "aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
174
- children: /* @__PURE__ */ jsx4("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
220
+ children: /* @__PURE__ */ jsx5("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
175
221
  }
176
222
  ),
177
- /* @__PURE__ */ jsx4(
223
+ /* @__PURE__ */ jsx5(
178
224
  "button",
179
225
  {
180
- className: styles4.mobileMenuBtn,
226
+ className: Header_default.mobileMenuBtn,
181
227
  onClick: toggleMobileMenu,
182
228
  "aria-label": "Toggle menu",
183
- children: /* @__PURE__ */ jsx4("span", { className: "material-symbols-outlined", children: mobileMenuOpen ? "close" : "menu" })
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: `${styles4.mobileMenu} ${mobileMenuOpen ? styles4.open : ""}`, children: [
189
- /* @__PURE__ */ jsx4("nav", { className: styles4.mobileNavLinks, children: navLinks.map((link) => /* @__PURE__ */ jsx4(
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: styles4.mobileNavLink,
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__ */ jsx4(
245
+ showContactButton && contactEmail && /* @__PURE__ */ jsx5(
200
246
  "a",
201
247
  {
202
248
  href: `mailto:${contactEmail}`,
203
- className: styles4.mobileContactBtn,
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
- import styles5 from "@/styles/Projects.module.css";
214
- import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
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: styles5.projects, id: "projects", children: [
221
- /* @__PURE__ */ jsxs5("div", { className: styles5.header, children: [
222
- /* @__PURE__ */ jsx5("h2", { className: styles5.title, children: "Selected Projects" }),
223
- showViewAll && /* @__PURE__ */ jsx5(Link2, { href: viewAllUrl, className: styles5.viewAllLink, children: "View all projects" })
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__ */ jsx5("div", { className: styles5.grid, children: projects.map((project) => {
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__ */ jsx5("div", { className: styles5.imageWrapper, children: /* @__PURE__ */ jsx5(
278
+ /* @__PURE__ */ jsx6("div", { className: Projects_default.imageWrapper, children: /* @__PURE__ */ jsx6(
229
279
  "div",
230
280
  {
231
- className: styles5.image,
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: styles5.content, children: [
241
- /* @__PURE__ */ jsx5("h3", { className: styles5.projectTitle, children: project.title }),
242
- /* @__PURE__ */ jsx5("p", { className: styles5.description, children: project.description }),
243
- /* @__PURE__ */ jsxs5("span", { className: styles5.caseStudyLink, children: [
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__ */ jsx5("span", { className: "material-symbols-outlined", children: "arrow_forward" })
296
+ /* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "arrow_forward" })
247
297
  ] })
248
298
  ] })
249
299
  ] });
250
- return project.slug?.current ? /* @__PURE__ */ jsx5(
300
+ return project.slug?.current ? /* @__PURE__ */ jsx6(
251
301
  Link2,
252
302
  {
253
303
  href: projectUrl,
254
- className: styles5.card,
304
+ className: Projects_default.card,
255
305
  children: CardContent
256
306
  },
257
307
  project._id
258
- ) : /* @__PURE__ */ jsx5("div", { className: styles5.card, children: CardContent }, project._id);
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 styles6 from "@/styles/Publications.module.css";
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: styles6.publications, id: "publications", children: [
268
- /* @__PURE__ */ jsx6("div", { className: styles6.header, children: /* @__PURE__ */ jsx6("h2", { className: styles6.title, children: "Recent Publications" }) }),
269
- /* @__PURE__ */ jsx6("div", { className: styles6.list, children: publications.map((pub) => /* @__PURE__ */ jsxs6("div", { className: styles6.item, children: [
270
- /* @__PURE__ */ jsxs6("div", { className: styles6.itemHeader, children: [
271
- /* @__PURE__ */ jsx6("h3", { className: styles6.pubTitle, children: pub.title }),
272
- /* @__PURE__ */ jsx6("span", { className: styles6.year, children: pub.year })
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__ */ jsx6("p", { className: styles6.authors, children: pub.authors }),
275
- /* @__PURE__ */ jsx6("p", { className: styles6.venue, children: pub.venue }),
276
- /* @__PURE__ */ jsxs6("div", { className: styles6.links, children: [
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: styles6.linkBtn,
335
+ className: Publications_default.linkBtn,
284
336
  children: [
285
- /* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "description" }),
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: styles6.linkBtn,
348
+ className: Publications_default.linkBtn,
297
349
  children: [
298
- /* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "code" }),
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: styles6.linkBtn,
361
+ className: Publications_default.linkBtn,
310
362
  children: [
311
- /* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "videocam" }),
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: styles6.linkBtn,
375
+ className: Publications_default.linkBtn,
324
376
  children: [
325
- /* @__PURE__ */ jsx6("span", { className: "material-symbols-outlined", children: "format_quote" }),
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 };