@takuhon/ui 0.11.0 → 0.12.0
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/ActivitySection.module-SQFQYFCW.module.css +18 -0
- package/dist/ImageField.module-CC3IBMDB.module.css +23 -0
- package/dist/admin/index.d.ts +62 -6
- package/dist/admin/index.js +343 -261
- package/dist/admin/index.js.map +1 -1
- package/dist/index.d.ts +29 -4
- package/dist/index.js +294 -270
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,26 +1,8 @@
|
|
|
1
1
|
// src/components/TakuhonProfile.tsx
|
|
2
2
|
import "./tokens-TEMWJS5E.css";
|
|
3
3
|
|
|
4
|
-
// src/
|
|
5
|
-
|
|
6
|
-
function formatYearMonth(value, locale) {
|
|
7
|
-
const match = YEAR_MONTH.exec(value);
|
|
8
|
-
if (!match) return value;
|
|
9
|
-
const year = Number(match[1]);
|
|
10
|
-
const month = Number(match[2]);
|
|
11
|
-
const date = /* @__PURE__ */ new Date(0);
|
|
12
|
-
date.setUTCFullYear(year, month - 1, 1);
|
|
13
|
-
const options = {
|
|
14
|
-
year: "numeric",
|
|
15
|
-
month: "short",
|
|
16
|
-
timeZone: "UTC"
|
|
17
|
-
};
|
|
18
|
-
try {
|
|
19
|
-
return new Intl.DateTimeFormat(locale || "en", options).format(date);
|
|
20
|
-
} catch {
|
|
21
|
-
return new Intl.DateTimeFormat("en", options).format(date);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
4
|
+
// src/components/ActivitySection.tsx
|
|
5
|
+
import { renderActivitySvg } from "@takuhon/core";
|
|
24
6
|
|
|
25
7
|
// src/lib/ui-labels.ts
|
|
26
8
|
var EN = {
|
|
@@ -39,6 +21,7 @@ var EN = {
|
|
|
39
21
|
"patentStatus.issued": "Issued",
|
|
40
22
|
"patentStatus.expired": "Expired",
|
|
41
23
|
"patentStatus.abandoned": "Abandoned",
|
|
24
|
+
"section.activity": "Activity",
|
|
42
25
|
"section.career": "Career",
|
|
43
26
|
"section.education": "Education",
|
|
44
27
|
"section.certifications": "Certifications",
|
|
@@ -81,6 +64,7 @@ var JA = {
|
|
|
81
64
|
"patentStatus.issued": "\u767B\u9332\u6E08",
|
|
82
65
|
"patentStatus.expired": "\u5931\u52B9",
|
|
83
66
|
"patentStatus.abandoned": "\u653E\u68C4",
|
|
67
|
+
"section.activity": "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",
|
|
84
68
|
"section.career": "\u8077\u6B74",
|
|
85
69
|
"section.education": "\u5B66\u6B74",
|
|
86
70
|
"section.certifications": "\u8CC7\u683C\u30FB\u8A8D\u5B9A",
|
|
@@ -116,9 +100,46 @@ function getUILabel(key, locale) {
|
|
|
116
100
|
return DICTIONARIES[locale]?.[key] ?? DICTIONARIES[base]?.[key] ?? EN[key];
|
|
117
101
|
}
|
|
118
102
|
|
|
103
|
+
// src/components/ActivitySection.tsx
|
|
104
|
+
import styles from "./ActivitySection.module-SQFQYFCW.module.css";
|
|
105
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
106
|
+
function ActivitySection({
|
|
107
|
+
snapshot,
|
|
108
|
+
locale = "en"
|
|
109
|
+
}) {
|
|
110
|
+
if (!snapshot) return null;
|
|
111
|
+
const svg = renderActivitySvg(snapshot);
|
|
112
|
+
if (svg === "") return null;
|
|
113
|
+
return /* @__PURE__ */ jsxs("section", { className: styles.section, "aria-labelledby": "takuhon-activity-heading", children: [
|
|
114
|
+
/* @__PURE__ */ jsx("h2", { id: "takuhon-activity-heading", className: styles.heading, children: getUILabel("section.activity", locale) }),
|
|
115
|
+
/* @__PURE__ */ jsx("div", { className: styles.card, dangerouslySetInnerHTML: { __html: svg } })
|
|
116
|
+
] });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// src/lib/date-formatter.ts
|
|
120
|
+
var YEAR_MONTH = /^(\d{4})-(0[1-9]|1[0-2])$/;
|
|
121
|
+
function formatYearMonth(value, locale) {
|
|
122
|
+
const match = YEAR_MONTH.exec(value);
|
|
123
|
+
if (!match) return value;
|
|
124
|
+
const year = Number(match[1]);
|
|
125
|
+
const month = Number(match[2]);
|
|
126
|
+
const date = /* @__PURE__ */ new Date(0);
|
|
127
|
+
date.setUTCFullYear(year, month - 1, 1);
|
|
128
|
+
const options = {
|
|
129
|
+
year: "numeric",
|
|
130
|
+
month: "short",
|
|
131
|
+
timeZone: "UTC"
|
|
132
|
+
};
|
|
133
|
+
try {
|
|
134
|
+
return new Intl.DateTimeFormat(locale || "en", options).format(date);
|
|
135
|
+
} catch {
|
|
136
|
+
return new Intl.DateTimeFormat("en", options).format(date);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
119
140
|
// src/components/CareerTimeline.tsx
|
|
120
|
-
import
|
|
121
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
141
|
+
import styles2 from "./CareerTimeline.module-BGFX3LGA.module.css";
|
|
142
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
122
143
|
function sortCareers(careers) {
|
|
123
144
|
return [...careers].sort((a, b) => {
|
|
124
145
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -136,15 +157,15 @@ function CareerTimeline({
|
|
|
136
157
|
}) {
|
|
137
158
|
if (careers.length === 0) return null;
|
|
138
159
|
const ordered = sortCareers(careers);
|
|
139
|
-
return /* @__PURE__ */
|
|
140
|
-
/* @__PURE__ */
|
|
141
|
-
/* @__PURE__ */
|
|
142
|
-
/* @__PURE__ */
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
-
/* @__PURE__ */
|
|
160
|
+
return /* @__PURE__ */ jsxs2("section", { className: styles2.section, "aria-labelledby": "takuhon-career-heading", children: [
|
|
161
|
+
/* @__PURE__ */ jsx2("h2", { id: "takuhon-career-heading", className: styles2.heading, children: getUILabel("section.career", locale) }),
|
|
162
|
+
/* @__PURE__ */ jsx2("ol", { className: styles2.list, children: ordered.map((career) => /* @__PURE__ */ jsxs2("li", { className: styles2.item, children: [
|
|
163
|
+
/* @__PURE__ */ jsx2("div", { className: styles2.timelineMarker, "aria-hidden": "true" }),
|
|
164
|
+
/* @__PURE__ */ jsxs2("div", { className: styles2.content, children: [
|
|
165
|
+
/* @__PURE__ */ jsx2("p", { className: styles2.role, children: career.url ? /* @__PURE__ */ jsxs2(
|
|
145
166
|
"a",
|
|
146
167
|
{
|
|
147
|
-
className:
|
|
168
|
+
className: styles2.organizationLink,
|
|
148
169
|
href: career.url,
|
|
149
170
|
target: "_blank",
|
|
150
171
|
rel: "noopener noreferrer",
|
|
@@ -154,26 +175,26 @@ function CareerTimeline({
|
|
|
154
175
|
career.organization
|
|
155
176
|
]
|
|
156
177
|
}
|
|
157
|
-
) : /* @__PURE__ */
|
|
178
|
+
) : /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
158
179
|
career.role,
|
|
159
180
|
" \xB7 ",
|
|
160
181
|
career.organization
|
|
161
182
|
] }) }),
|
|
162
|
-
/* @__PURE__ */
|
|
163
|
-
/* @__PURE__ */
|
|
183
|
+
/* @__PURE__ */ jsxs2("p", { className: styles2.range, children: [
|
|
184
|
+
/* @__PURE__ */ jsx2("time", { dateTime: career.startDate, children: formatYearMonth(career.startDate, locale) }),
|
|
164
185
|
" \u2013 ",
|
|
165
|
-
isOngoing(career) ? getUILabel("timeline.present", locale) : /* @__PURE__ */
|
|
186
|
+
isOngoing(career) ? getUILabel("timeline.present", locale) : /* @__PURE__ */ jsx2("time", { dateTime: career.endDate, children: formatYearMonth(career.endDate, locale) })
|
|
166
187
|
] }),
|
|
167
|
-
career.location?.display ? /* @__PURE__ */
|
|
168
|
-
career.description ? /* @__PURE__ */
|
|
188
|
+
career.location?.display ? /* @__PURE__ */ jsx2("p", { className: styles2.location, children: career.location.display }) : null,
|
|
189
|
+
career.description ? /* @__PURE__ */ jsx2("p", { className: styles2.description, children: career.description }) : null
|
|
169
190
|
] })
|
|
170
191
|
] }, career.id)) })
|
|
171
192
|
] });
|
|
172
193
|
}
|
|
173
194
|
|
|
174
195
|
// src/components/Certifications.tsx
|
|
175
|
-
import
|
|
176
|
-
import { Fragment as Fragment2, jsx as
|
|
196
|
+
import styles3 from "./Certifications.module-2NMKPWLM.module.css";
|
|
197
|
+
import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
177
198
|
function sortCerts(certs) {
|
|
178
199
|
return [...certs].sort((a, b) => {
|
|
179
200
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -188,29 +209,29 @@ function Certifications({
|
|
|
188
209
|
}) {
|
|
189
210
|
if (certifications.length === 0) return null;
|
|
190
211
|
const ordered = sortCerts(certifications);
|
|
191
|
-
return /* @__PURE__ */
|
|
192
|
-
/* @__PURE__ */
|
|
193
|
-
/* @__PURE__ */
|
|
194
|
-
/* @__PURE__ */
|
|
212
|
+
return /* @__PURE__ */ jsxs3("section", { className: styles3.section, "aria-labelledby": "takuhon-certifications-heading", children: [
|
|
213
|
+
/* @__PURE__ */ jsx3("h2", { id: "takuhon-certifications-heading", className: styles3.heading, children: getUILabel("section.certifications", locale) }),
|
|
214
|
+
/* @__PURE__ */ jsx3("ul", { className: styles3.list, children: ordered.map((cert) => /* @__PURE__ */ jsxs3("li", { className: styles3.item, children: [
|
|
215
|
+
/* @__PURE__ */ jsx3("p", { className: styles3.title, children: cert.url ? /* @__PURE__ */ jsx3(
|
|
195
216
|
"a",
|
|
196
217
|
{
|
|
197
|
-
className:
|
|
218
|
+
className: styles3.link,
|
|
198
219
|
href: cert.url,
|
|
199
220
|
target: "_blank",
|
|
200
221
|
rel: "noopener noreferrer",
|
|
201
222
|
children: cert.title
|
|
202
223
|
}
|
|
203
224
|
) : cert.title }),
|
|
204
|
-
/* @__PURE__ */
|
|
205
|
-
/* @__PURE__ */
|
|
206
|
-
/* @__PURE__ */
|
|
207
|
-
cert.expirationDate === null ? /* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ jsx3("p", { className: styles3.issuer, children: cert.issuingOrganization }),
|
|
226
|
+
/* @__PURE__ */ jsxs3("p", { className: styles3.range, children: [
|
|
227
|
+
/* @__PURE__ */ jsx3("time", { dateTime: cert.issueDate, children: formatYearMonth(cert.issueDate, locale) }),
|
|
228
|
+
cert.expirationDate === null ? /* @__PURE__ */ jsxs3("span", { className: styles3.tag, children: [
|
|
208
229
|
" ",
|
|
209
230
|
"\xB7 ",
|
|
210
231
|
getUILabel("certification.noExpiration", locale)
|
|
211
|
-
] }) : cert.expirationDate !== void 0 ? /* @__PURE__ */
|
|
232
|
+
] }) : cert.expirationDate !== void 0 ? /* @__PURE__ */ jsxs3(Fragment2, { children: [
|
|
212
233
|
" \u2013 ",
|
|
213
|
-
/* @__PURE__ */
|
|
234
|
+
/* @__PURE__ */ jsx3("time", { dateTime: cert.expirationDate, children: formatYearMonth(cert.expirationDate, locale) })
|
|
214
235
|
] }) : null
|
|
215
236
|
] })
|
|
216
237
|
] }, cert.id)) })
|
|
@@ -218,22 +239,22 @@ function Certifications({
|
|
|
218
239
|
}
|
|
219
240
|
|
|
220
241
|
// src/components/ContactInfo.tsx
|
|
221
|
-
import
|
|
222
|
-
import { jsx as
|
|
242
|
+
import styles4 from "./ContactInfo.module-7SO24KHC.module.css";
|
|
243
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
223
244
|
function ContactInfo({
|
|
224
245
|
contact,
|
|
225
246
|
locale = "en"
|
|
226
247
|
}) {
|
|
227
248
|
const showEmail = contact.showEmail === true && contact.email !== void 0;
|
|
228
249
|
if (!showEmail && contact.formUrl === void 0) return null;
|
|
229
|
-
return /* @__PURE__ */
|
|
230
|
-
/* @__PURE__ */
|
|
231
|
-
/* @__PURE__ */
|
|
232
|
-
showEmail && contact.email !== void 0 ? /* @__PURE__ */
|
|
233
|
-
contact.formUrl !== void 0 ? /* @__PURE__ */
|
|
250
|
+
return /* @__PURE__ */ jsxs4("section", { className: styles4.section, "aria-labelledby": "takuhon-contact-heading", children: [
|
|
251
|
+
/* @__PURE__ */ jsx4("h2", { id: "takuhon-contact-heading", className: styles4.heading, children: getUILabel("section.contact", locale) }),
|
|
252
|
+
/* @__PURE__ */ jsxs4("ul", { className: styles4.list, children: [
|
|
253
|
+
showEmail && contact.email !== void 0 ? /* @__PURE__ */ jsx4("li", { className: styles4.item, children: /* @__PURE__ */ jsx4("a", { className: styles4.link, href: `mailto:${contact.email}`, children: contact.email }) }) : null,
|
|
254
|
+
contact.formUrl !== void 0 ? /* @__PURE__ */ jsx4("li", { className: styles4.item, children: /* @__PURE__ */ jsx4(
|
|
234
255
|
"a",
|
|
235
256
|
{
|
|
236
|
-
className:
|
|
257
|
+
className: styles4.link,
|
|
237
258
|
href: contact.formUrl,
|
|
238
259
|
target: "_blank",
|
|
239
260
|
rel: "noopener noreferrer",
|
|
@@ -245,8 +266,8 @@ function ContactInfo({
|
|
|
245
266
|
}
|
|
246
267
|
|
|
247
268
|
// src/components/Courses.tsx
|
|
248
|
-
import
|
|
249
|
-
import { jsx as
|
|
269
|
+
import styles5 from "./Courses.module-EVDSFNGW.module.css";
|
|
270
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
250
271
|
function sortCourses(entries) {
|
|
251
272
|
return [...entries].sort((a, b) => {
|
|
252
273
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -258,30 +279,30 @@ function sortCourses(entries) {
|
|
|
258
279
|
function Courses({ courses, locale = "en" }) {
|
|
259
280
|
if (courses.length === 0) return null;
|
|
260
281
|
const ordered = sortCourses(courses);
|
|
261
|
-
return /* @__PURE__ */
|
|
262
|
-
/* @__PURE__ */
|
|
263
|
-
/* @__PURE__ */
|
|
264
|
-
/* @__PURE__ */
|
|
282
|
+
return /* @__PURE__ */ jsxs5("section", { className: styles5.section, "aria-labelledby": "takuhon-courses-heading", children: [
|
|
283
|
+
/* @__PURE__ */ jsx5("h2", { id: "takuhon-courses-heading", className: styles5.heading, children: getUILabel("section.courses", locale) }),
|
|
284
|
+
/* @__PURE__ */ jsx5("ul", { className: styles5.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs5("li", { className: styles5.item, children: [
|
|
285
|
+
/* @__PURE__ */ jsx5("p", { className: styles5.title, children: entry.certificateUrl ? /* @__PURE__ */ jsx5(
|
|
265
286
|
"a",
|
|
266
287
|
{
|
|
267
|
-
className:
|
|
288
|
+
className: styles5.link,
|
|
268
289
|
href: entry.certificateUrl,
|
|
269
290
|
target: "_blank",
|
|
270
291
|
rel: "noopener noreferrer",
|
|
271
292
|
children: entry.title
|
|
272
293
|
}
|
|
273
294
|
) : entry.title }),
|
|
274
|
-
entry.provider ? /* @__PURE__ */
|
|
275
|
-
entry.courseNumber ? /* @__PURE__ */
|
|
276
|
-
entry.completionDate ? /* @__PURE__ */
|
|
277
|
-
entry.description ? /* @__PURE__ */
|
|
295
|
+
entry.provider ? /* @__PURE__ */ jsx5("p", { className: styles5.provider, children: entry.provider }) : null,
|
|
296
|
+
entry.courseNumber ? /* @__PURE__ */ jsx5("p", { className: styles5.courseNumber, children: entry.courseNumber }) : null,
|
|
297
|
+
entry.completionDate ? /* @__PURE__ */ jsx5("p", { className: styles5.date, children: /* @__PURE__ */ jsx5("time", { dateTime: entry.completionDate, children: formatYearMonth(entry.completionDate, locale) }) }) : null,
|
|
298
|
+
entry.description ? /* @__PURE__ */ jsx5("p", { className: styles5.description, children: entry.description }) : null
|
|
278
299
|
] }, entry.id)) })
|
|
279
300
|
] });
|
|
280
301
|
}
|
|
281
302
|
|
|
282
303
|
// src/components/EducationTimeline.tsx
|
|
283
|
-
import
|
|
284
|
-
import { jsx as
|
|
304
|
+
import styles6 from "./EducationTimeline.module-7YQTH6QU.module.css";
|
|
305
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
285
306
|
function sortEducation(entries) {
|
|
286
307
|
return [...entries].sort((a, b) => {
|
|
287
308
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -305,31 +326,31 @@ function EducationTimeline({
|
|
|
305
326
|
}) {
|
|
306
327
|
if (education.length === 0) return null;
|
|
307
328
|
const ordered = sortEducation(education);
|
|
308
|
-
return /* @__PURE__ */
|
|
309
|
-
/* @__PURE__ */
|
|
310
|
-
/* @__PURE__ */
|
|
329
|
+
return /* @__PURE__ */ jsxs6("section", { className: styles6.section, "aria-labelledby": "takuhon-education-heading", children: [
|
|
330
|
+
/* @__PURE__ */ jsx6("h2", { id: "takuhon-education-heading", className: styles6.heading, children: getUILabel("section.education", locale) }),
|
|
331
|
+
/* @__PURE__ */ jsx6("ol", { className: styles6.list, children: ordered.map((entry) => {
|
|
311
332
|
const study = composeStudyLine(entry);
|
|
312
|
-
return /* @__PURE__ */
|
|
313
|
-
/* @__PURE__ */
|
|
314
|
-
/* @__PURE__ */
|
|
315
|
-
/* @__PURE__ */
|
|
333
|
+
return /* @__PURE__ */ jsxs6("li", { className: styles6.item, children: [
|
|
334
|
+
/* @__PURE__ */ jsx6("div", { className: styles6.timelineMarker, "aria-hidden": "true" }),
|
|
335
|
+
/* @__PURE__ */ jsxs6("div", { className: styles6.content, children: [
|
|
336
|
+
/* @__PURE__ */ jsx6("p", { className: styles6.institution, children: entry.url ? /* @__PURE__ */ jsx6(
|
|
316
337
|
"a",
|
|
317
338
|
{
|
|
318
|
-
className:
|
|
339
|
+
className: styles6.link,
|
|
319
340
|
href: entry.url,
|
|
320
341
|
target: "_blank",
|
|
321
342
|
rel: "noopener noreferrer",
|
|
322
343
|
children: entry.institution
|
|
323
344
|
}
|
|
324
345
|
) : entry.institution }),
|
|
325
|
-
study ? /* @__PURE__ */
|
|
326
|
-
/* @__PURE__ */
|
|
327
|
-
/* @__PURE__ */
|
|
346
|
+
study ? /* @__PURE__ */ jsx6("p", { className: styles6.study, children: study }) : null,
|
|
347
|
+
/* @__PURE__ */ jsxs6("p", { className: styles6.range, children: [
|
|
348
|
+
/* @__PURE__ */ jsx6("time", { dateTime: entry.startDate, children: formatYearMonth(entry.startDate, locale) }),
|
|
328
349
|
" \u2013 ",
|
|
329
|
-
isOngoing2(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */
|
|
350
|
+
isOngoing2(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */ jsx6("time", { dateTime: entry.endDate, children: formatYearMonth(entry.endDate, locale) })
|
|
330
351
|
] }),
|
|
331
|
-
entry.grade ? /* @__PURE__ */
|
|
332
|
-
entry.description ? /* @__PURE__ */
|
|
352
|
+
entry.grade ? /* @__PURE__ */ jsx6("p", { className: styles6.grade, children: entry.grade }) : null,
|
|
353
|
+
entry.description ? /* @__PURE__ */ jsx6("p", { className: styles6.description, children: entry.description }) : null
|
|
333
354
|
] })
|
|
334
355
|
] }, entry.id);
|
|
335
356
|
}) })
|
|
@@ -337,16 +358,16 @@ function EducationTimeline({
|
|
|
337
358
|
}
|
|
338
359
|
|
|
339
360
|
// src/components/Footer.tsx
|
|
340
|
-
import
|
|
341
|
-
import { jsx as
|
|
361
|
+
import styles7 from "./Footer.module-HLC5GXVI.module.css";
|
|
362
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
342
363
|
function Footer() {
|
|
343
|
-
return /* @__PURE__ */
|
|
364
|
+
return /* @__PURE__ */ jsx7("footer", { className: styles7.footer, children: /* @__PURE__ */ jsxs7("p", { className: styles7.line, children: [
|
|
344
365
|
"Powered by",
|
|
345
366
|
" ",
|
|
346
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ jsx7(
|
|
347
368
|
"a",
|
|
348
369
|
{
|
|
349
|
-
className:
|
|
370
|
+
className: styles7.link,
|
|
350
371
|
href: "https://github.com/takuhon-dev/takuhon",
|
|
351
372
|
target: "_blank",
|
|
352
373
|
rel: "noopener noreferrer",
|
|
@@ -357,8 +378,8 @@ function Footer() {
|
|
|
357
378
|
}
|
|
358
379
|
|
|
359
380
|
// src/components/HonorsList.tsx
|
|
360
|
-
import
|
|
361
|
-
import { jsx as
|
|
381
|
+
import styles8 from "./HonorsList.module-AQN3CT7O.module.css";
|
|
382
|
+
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
362
383
|
function sortHonors(honors) {
|
|
363
384
|
return [...honors].sort((a, b) => {
|
|
364
385
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -370,32 +391,32 @@ function sortHonors(honors) {
|
|
|
370
391
|
function HonorsList({ honors, locale = "en" }) {
|
|
371
392
|
if (honors.length === 0) return null;
|
|
372
393
|
const ordered = sortHonors(honors);
|
|
373
|
-
return /* @__PURE__ */
|
|
374
|
-
/* @__PURE__ */
|
|
375
|
-
/* @__PURE__ */
|
|
376
|
-
/* @__PURE__ */
|
|
394
|
+
return /* @__PURE__ */ jsxs8("section", { className: styles8.section, "aria-labelledby": "takuhon-honors-heading", children: [
|
|
395
|
+
/* @__PURE__ */ jsx8("h2", { id: "takuhon-honors-heading", className: styles8.heading, children: getUILabel("section.honors", locale) }),
|
|
396
|
+
/* @__PURE__ */ jsx8("ul", { className: styles8.list, children: ordered.map((honor) => /* @__PURE__ */ jsxs8("li", { className: styles8.item, children: [
|
|
397
|
+
/* @__PURE__ */ jsx8("p", { className: styles8.title, children: honor.url ? /* @__PURE__ */ jsx8(
|
|
377
398
|
"a",
|
|
378
399
|
{
|
|
379
|
-
className:
|
|
400
|
+
className: styles8.link,
|
|
380
401
|
href: honor.url,
|
|
381
402
|
target: "_blank",
|
|
382
403
|
rel: "noopener noreferrer",
|
|
383
404
|
children: honor.title
|
|
384
405
|
}
|
|
385
406
|
) : honor.title }),
|
|
386
|
-
/* @__PURE__ */
|
|
407
|
+
/* @__PURE__ */ jsxs8("p", { className: styles8.meta, children: [
|
|
387
408
|
honor.issuer,
|
|
388
409
|
" \xB7 ",
|
|
389
|
-
/* @__PURE__ */
|
|
410
|
+
/* @__PURE__ */ jsx8("time", { dateTime: honor.date, children: formatYearMonth(honor.date, locale) })
|
|
390
411
|
] }),
|
|
391
|
-
honor.description ? /* @__PURE__ */
|
|
412
|
+
honor.description ? /* @__PURE__ */ jsx8("p", { className: styles8.description, children: honor.description }) : null
|
|
392
413
|
] }, honor.id)) })
|
|
393
414
|
] });
|
|
394
415
|
}
|
|
395
416
|
|
|
396
417
|
// src/components/Languages.tsx
|
|
397
|
-
import
|
|
398
|
-
import { jsx as
|
|
418
|
+
import styles9 from "./Languages.module-X6RQNFRY.module.css";
|
|
419
|
+
import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
399
420
|
function sortLanguages(languages) {
|
|
400
421
|
return [...languages].sort((a, b) => {
|
|
401
422
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -406,18 +427,18 @@ function sortLanguages(languages) {
|
|
|
406
427
|
function Languages({ languages, locale = "en" }) {
|
|
407
428
|
if (languages.length === 0) return null;
|
|
408
429
|
const ordered = sortLanguages(languages);
|
|
409
|
-
return /* @__PURE__ */
|
|
410
|
-
/* @__PURE__ */
|
|
411
|
-
/* @__PURE__ */
|
|
412
|
-
/* @__PURE__ */
|
|
413
|
-
/* @__PURE__ */
|
|
430
|
+
return /* @__PURE__ */ jsxs9("section", { className: styles9.section, "aria-labelledby": "takuhon-languages-heading", children: [
|
|
431
|
+
/* @__PURE__ */ jsx9("h2", { id: "takuhon-languages-heading", className: styles9.heading, children: getUILabel("section.languages", locale) }),
|
|
432
|
+
/* @__PURE__ */ jsx9("ul", { className: styles9.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs9("li", { className: styles9.item, children: [
|
|
433
|
+
/* @__PURE__ */ jsx9("span", { className: styles9.name, lang: entry.language, children: entry.displayName ?? entry.language }),
|
|
434
|
+
/* @__PURE__ */ jsx9("span", { className: styles9.proficiency, children: getUILabel(`proficiency.${entry.proficiency}`, locale) })
|
|
414
435
|
] }, entry.id)) })
|
|
415
436
|
] });
|
|
416
437
|
}
|
|
417
438
|
|
|
418
439
|
// src/components/LinksList.tsx
|
|
419
|
-
import
|
|
420
|
-
import { jsx as
|
|
440
|
+
import styles10 from "./LinksList.module-QPSFPOF3.module.css";
|
|
441
|
+
import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
421
442
|
function sortLinks(links) {
|
|
422
443
|
return [...links].sort((a, b) => {
|
|
423
444
|
const aFeatured = a.featured ? 1 : 0;
|
|
@@ -436,25 +457,25 @@ function formatLinkLabel(link) {
|
|
|
436
457
|
function LinksList({ links, locale = "en" }) {
|
|
437
458
|
if (links.length === 0) return null;
|
|
438
459
|
const ordered = sortLinks(links);
|
|
439
|
-
return /* @__PURE__ */
|
|
460
|
+
return /* @__PURE__ */ jsx10("nav", { "aria-label": getUILabel("a11y.profileLinks", locale), className: styles10.nav, children: /* @__PURE__ */ jsx10("ul", { className: styles10.list, children: ordered.map((link) => /* @__PURE__ */ jsx10("li", { className: styles10.item, children: /* @__PURE__ */ jsxs10(
|
|
440
461
|
"a",
|
|
441
462
|
{
|
|
442
|
-
className:
|
|
463
|
+
className: styles10.link,
|
|
443
464
|
href: link.url,
|
|
444
465
|
target: "_blank",
|
|
445
466
|
rel: "noopener noreferrer",
|
|
446
467
|
"data-featured": link.featured ? "true" : void 0,
|
|
447
468
|
children: [
|
|
448
|
-
link.iconUrl ? /* @__PURE__ */
|
|
449
|
-
/* @__PURE__ */
|
|
469
|
+
link.iconUrl ? /* @__PURE__ */ jsx10("img", { className: styles10.icon, src: link.iconUrl, alt: "" }) : null,
|
|
470
|
+
/* @__PURE__ */ jsx10("span", { className: styles10.label, children: formatLinkLabel(link) })
|
|
450
471
|
]
|
|
451
472
|
}
|
|
452
473
|
) }, link.id)) }) });
|
|
453
474
|
}
|
|
454
475
|
|
|
455
476
|
// src/components/Memberships.tsx
|
|
456
|
-
import
|
|
457
|
-
import { jsx as
|
|
477
|
+
import styles11 from "./Memberships.module-SMJBJFA2.module.css";
|
|
478
|
+
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
458
479
|
function sortMemberships(entries) {
|
|
459
480
|
return [...entries].sort((a, b) => {
|
|
460
481
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -472,36 +493,36 @@ function Memberships({
|
|
|
472
493
|
}) {
|
|
473
494
|
if (memberships.length === 0) return null;
|
|
474
495
|
const ordered = sortMemberships(memberships);
|
|
475
|
-
return /* @__PURE__ */
|
|
476
|
-
/* @__PURE__ */
|
|
477
|
-
/* @__PURE__ */
|
|
478
|
-
/* @__PURE__ */
|
|
479
|
-
/* @__PURE__ */
|
|
480
|
-
/* @__PURE__ */
|
|
496
|
+
return /* @__PURE__ */ jsxs11("section", { className: styles11.section, "aria-labelledby": "takuhon-memberships-heading", children: [
|
|
497
|
+
/* @__PURE__ */ jsx11("h2", { id: "takuhon-memberships-heading", className: styles11.heading, children: getUILabel("section.memberships", locale) }),
|
|
498
|
+
/* @__PURE__ */ jsx11("ol", { className: styles11.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs11("li", { className: styles11.item, children: [
|
|
499
|
+
/* @__PURE__ */ jsx11("div", { className: styles11.timelineMarker, "aria-hidden": "true" }),
|
|
500
|
+
/* @__PURE__ */ jsxs11("div", { className: styles11.content, children: [
|
|
501
|
+
/* @__PURE__ */ jsx11("p", { className: styles11.organization, children: entry.url ? /* @__PURE__ */ jsx11(
|
|
481
502
|
"a",
|
|
482
503
|
{
|
|
483
|
-
className:
|
|
504
|
+
className: styles11.link,
|
|
484
505
|
href: entry.url,
|
|
485
506
|
target: "_blank",
|
|
486
507
|
rel: "noopener noreferrer",
|
|
487
508
|
children: entry.organization
|
|
488
509
|
}
|
|
489
510
|
) : entry.organization }),
|
|
490
|
-
entry.role ? /* @__PURE__ */
|
|
491
|
-
/* @__PURE__ */
|
|
492
|
-
/* @__PURE__ */
|
|
511
|
+
entry.role ? /* @__PURE__ */ jsx11("p", { className: styles11.role, children: entry.role }) : null,
|
|
512
|
+
/* @__PURE__ */ jsxs11("p", { className: styles11.range, children: [
|
|
513
|
+
/* @__PURE__ */ jsx11("time", { dateTime: entry.startDate, children: formatYearMonth(entry.startDate, locale) }),
|
|
493
514
|
" \u2013 ",
|
|
494
|
-
isOngoing3(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */
|
|
515
|
+
isOngoing3(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */ jsx11("time", { dateTime: entry.endDate, children: formatYearMonth(entry.endDate, locale) })
|
|
495
516
|
] }),
|
|
496
|
-
entry.description ? /* @__PURE__ */
|
|
517
|
+
entry.description ? /* @__PURE__ */ jsx11("p", { className: styles11.description, children: entry.description }) : null
|
|
497
518
|
] })
|
|
498
519
|
] }, entry.id)) })
|
|
499
520
|
] });
|
|
500
521
|
}
|
|
501
522
|
|
|
502
523
|
// src/components/Patents.tsx
|
|
503
|
-
import
|
|
504
|
-
import { Fragment as Fragment3, jsx as
|
|
524
|
+
import styles12 from "./Patents.module-L3GWPB3V.module.css";
|
|
525
|
+
import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
505
526
|
function sortPatents(entries) {
|
|
506
527
|
return [...entries].sort((a, b) => {
|
|
507
528
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -515,54 +536,54 @@ function sortPatents(entries) {
|
|
|
515
536
|
function Patents({ patents, locale = "en" }) {
|
|
516
537
|
if (patents.length === 0) return null;
|
|
517
538
|
const ordered = sortPatents(patents);
|
|
518
|
-
return /* @__PURE__ */
|
|
519
|
-
/* @__PURE__ */
|
|
520
|
-
/* @__PURE__ */
|
|
521
|
-
/* @__PURE__ */
|
|
522
|
-
entry.url ? /* @__PURE__ */
|
|
539
|
+
return /* @__PURE__ */ jsxs12("section", { className: styles12.section, "aria-labelledby": "takuhon-patents-heading", children: [
|
|
540
|
+
/* @__PURE__ */ jsx12("h2", { id: "takuhon-patents-heading", className: styles12.heading, children: getUILabel("section.patents", locale) }),
|
|
541
|
+
/* @__PURE__ */ jsx12("ul", { className: styles12.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs12("li", { className: styles12.item, children: [
|
|
542
|
+
/* @__PURE__ */ jsxs12("p", { className: styles12.title, children: [
|
|
543
|
+
entry.url ? /* @__PURE__ */ jsx12(
|
|
523
544
|
"a",
|
|
524
545
|
{
|
|
525
|
-
className:
|
|
546
|
+
className: styles12.link,
|
|
526
547
|
href: entry.url,
|
|
527
548
|
target: "_blank",
|
|
528
549
|
rel: "noopener noreferrer",
|
|
529
550
|
children: entry.title
|
|
530
551
|
}
|
|
531
552
|
) : entry.title,
|
|
532
|
-
/* @__PURE__ */
|
|
533
|
-
/* @__PURE__ */
|
|
553
|
+
/* @__PURE__ */ jsxs12("span", { className: styles12.statusBadge, "data-status": entry.status, children: [
|
|
554
|
+
/* @__PURE__ */ jsx12("span", { className: styles12.srOnly, children: getUILabel("a11y.statusPrefix", locale) }),
|
|
534
555
|
getUILabel(`patentStatus.${entry.status}`, locale)
|
|
535
556
|
] })
|
|
536
557
|
] }),
|
|
537
|
-
/* @__PURE__ */
|
|
538
|
-
entry.office ? /* @__PURE__ */
|
|
539
|
-
entry.filingDate !== void 0 || entry.grantDate !== void 0 ? /* @__PURE__ */
|
|
540
|
-
entry.filingDate ? /* @__PURE__ */
|
|
558
|
+
/* @__PURE__ */ jsx12("p", { className: styles12.patentNumber, children: entry.patentNumber }),
|
|
559
|
+
entry.office ? /* @__PURE__ */ jsx12("p", { className: styles12.office, children: entry.office }) : null,
|
|
560
|
+
entry.filingDate !== void 0 || entry.grantDate !== void 0 ? /* @__PURE__ */ jsxs12("p", { className: styles12.dates, children: [
|
|
561
|
+
entry.filingDate ? /* @__PURE__ */ jsxs12(Fragment3, { children: [
|
|
541
562
|
`${getUILabel("patent.filed", locale)} `,
|
|
542
|
-
/* @__PURE__ */
|
|
563
|
+
/* @__PURE__ */ jsx12("time", { dateTime: entry.filingDate, children: formatYearMonth(entry.filingDate, locale) })
|
|
543
564
|
] }) : null,
|
|
544
565
|
entry.filingDate && entry.grantDate ? " \xB7 " : null,
|
|
545
|
-
entry.grantDate ? /* @__PURE__ */
|
|
566
|
+
entry.grantDate ? /* @__PURE__ */ jsxs12(Fragment3, { children: [
|
|
546
567
|
`${getUILabel("patent.granted", locale)} `,
|
|
547
|
-
/* @__PURE__ */
|
|
568
|
+
/* @__PURE__ */ jsx12("time", { dateTime: entry.grantDate, children: formatYearMonth(entry.grantDate, locale) })
|
|
548
569
|
] }) : null
|
|
549
570
|
] }) : null,
|
|
550
|
-
entry.coInventors && entry.coInventors.length > 0 ? /* @__PURE__ */
|
|
551
|
-
entry.description ? /* @__PURE__ */
|
|
571
|
+
entry.coInventors && entry.coInventors.length > 0 ? /* @__PURE__ */ jsx12("p", { className: styles12.coInventors, children: `${getUILabel("patent.coInventorsPrefix", locale)}${entry.coInventors.join(", ")}` }) : null,
|
|
572
|
+
entry.description ? /* @__PURE__ */ jsx12("p", { className: styles12.description, children: entry.description }) : null
|
|
552
573
|
] }, entry.id)) })
|
|
553
574
|
] });
|
|
554
575
|
}
|
|
555
576
|
|
|
556
577
|
// src/components/ProfileHeader.tsx
|
|
557
|
-
import
|
|
558
|
-
import { jsx as
|
|
578
|
+
import styles13 from "./ProfileHeader.module-EK27UTZL.module.css";
|
|
579
|
+
import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
559
580
|
function ProfileHeader({ profile }) {
|
|
560
581
|
const locationLabel = profile.location?.display ?? profile.location?.locality;
|
|
561
|
-
return /* @__PURE__ */
|
|
562
|
-
profile.avatar ? /* @__PURE__ */
|
|
582
|
+
return /* @__PURE__ */ jsxs13("header", { className: styles13.header, children: [
|
|
583
|
+
profile.avatar ? /* @__PURE__ */ jsx13(
|
|
563
584
|
"img",
|
|
564
585
|
{
|
|
565
|
-
className:
|
|
586
|
+
className: styles13.avatar,
|
|
566
587
|
src: profile.avatar.url,
|
|
567
588
|
alt: profile.avatar.alt ?? "",
|
|
568
589
|
width: 128,
|
|
@@ -571,16 +592,16 @@ function ProfileHeader({ profile }) {
|
|
|
571
592
|
decoding: "async"
|
|
572
593
|
}
|
|
573
594
|
) : null,
|
|
574
|
-
/* @__PURE__ */
|
|
575
|
-
profile.tagline ? /* @__PURE__ */
|
|
576
|
-
locationLabel ? /* @__PURE__ */
|
|
577
|
-
profile.bio ? /* @__PURE__ */
|
|
595
|
+
/* @__PURE__ */ jsx13("h1", { className: styles13.displayName, children: profile.displayName }),
|
|
596
|
+
profile.tagline ? /* @__PURE__ */ jsx13("p", { className: styles13.tagline, children: profile.tagline }) : null,
|
|
597
|
+
locationLabel ? /* @__PURE__ */ jsx13("p", { className: styles13.location, children: locationLabel }) : null,
|
|
598
|
+
profile.bio ? /* @__PURE__ */ jsx13("p", { className: styles13.bio, children: profile.bio }) : null
|
|
578
599
|
] });
|
|
579
600
|
}
|
|
580
601
|
|
|
581
602
|
// src/components/ProjectsList.tsx
|
|
582
|
-
import
|
|
583
|
-
import { jsx as
|
|
603
|
+
import styles14 from "./ProjectsList.module-JKGGZRKO.module.css";
|
|
604
|
+
import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
584
605
|
function sortProjects(projects) {
|
|
585
606
|
return [...projects].sort((a, b) => {
|
|
586
607
|
const aHighlighted = a.highlighted ? 1 : 0;
|
|
@@ -597,31 +618,31 @@ function ProjectsList({
|
|
|
597
618
|
}) {
|
|
598
619
|
if (projects.length === 0) return null;
|
|
599
620
|
const ordered = sortProjects(projects);
|
|
600
|
-
return /* @__PURE__ */
|
|
601
|
-
/* @__PURE__ */
|
|
602
|
-
/* @__PURE__ */
|
|
621
|
+
return /* @__PURE__ */ jsxs14("section", { className: styles14.section, "aria-labelledby": "takuhon-projects-heading", children: [
|
|
622
|
+
/* @__PURE__ */ jsx14("h2", { id: "takuhon-projects-heading", className: styles14.heading, children: getUILabel("section.projects", locale) }),
|
|
623
|
+
/* @__PURE__ */ jsx14("ul", { className: styles14.list, children: ordered.map((project) => /* @__PURE__ */ jsxs14(
|
|
603
624
|
"li",
|
|
604
625
|
{
|
|
605
|
-
className:
|
|
626
|
+
className: styles14.item,
|
|
606
627
|
"data-highlighted": project.highlighted ? "true" : void 0,
|
|
607
628
|
children: [
|
|
608
|
-
/* @__PURE__ */
|
|
629
|
+
/* @__PURE__ */ jsx14("p", { className: styles14.title, children: project.url ? /* @__PURE__ */ jsx14(
|
|
609
630
|
"a",
|
|
610
631
|
{
|
|
611
|
-
className:
|
|
632
|
+
className: styles14.titleLink,
|
|
612
633
|
href: project.url,
|
|
613
634
|
target: "_blank",
|
|
614
635
|
rel: "noopener noreferrer",
|
|
615
636
|
children: project.title
|
|
616
637
|
}
|
|
617
638
|
) : project.title }),
|
|
618
|
-
project.startDate !== void 0 ? /* @__PURE__ */
|
|
619
|
-
/* @__PURE__ */
|
|
639
|
+
project.startDate !== void 0 ? /* @__PURE__ */ jsxs14("p", { className: styles14.range, children: [
|
|
640
|
+
/* @__PURE__ */ jsx14("time", { dateTime: project.startDate, children: formatYearMonth(project.startDate, locale) }),
|
|
620
641
|
" \u2013 ",
|
|
621
|
-
project.endDate ? /* @__PURE__ */
|
|
642
|
+
project.endDate ? /* @__PURE__ */ jsx14("time", { dateTime: project.endDate, children: formatYearMonth(project.endDate, locale) }) : getUILabel("timeline.present", locale)
|
|
622
643
|
] }) : null,
|
|
623
|
-
project.description ? /* @__PURE__ */
|
|
624
|
-
project.tags && project.tags.length > 0 ? /* @__PURE__ */
|
|
644
|
+
project.description ? /* @__PURE__ */ jsx14("p", { className: styles14.description, children: project.description }) : null,
|
|
645
|
+
project.tags && project.tags.length > 0 ? /* @__PURE__ */ jsx14("ul", { className: styles14.tags, "aria-label": getUILabel("a11y.tags", locale), children: project.tags.map((tag) => /* @__PURE__ */ jsx14("li", { className: styles14.tag, children: tag }, tag)) }) : null
|
|
625
646
|
]
|
|
626
647
|
},
|
|
627
648
|
project.id
|
|
@@ -630,8 +651,8 @@ function ProjectsList({
|
|
|
630
651
|
}
|
|
631
652
|
|
|
632
653
|
// src/components/Publications.tsx
|
|
633
|
-
import
|
|
634
|
-
import { jsx as
|
|
654
|
+
import styles15 from "./Publications.module-INRTHJMO.module.css";
|
|
655
|
+
import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
635
656
|
function sortPublications(entries) {
|
|
636
657
|
return [...entries].sort((a, b) => {
|
|
637
658
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -649,28 +670,28 @@ function Publications({
|
|
|
649
670
|
}) {
|
|
650
671
|
if (publications.length === 0) return null;
|
|
651
672
|
const ordered = sortPublications(publications);
|
|
652
|
-
return /* @__PURE__ */
|
|
653
|
-
/* @__PURE__ */
|
|
654
|
-
/* @__PURE__ */
|
|
655
|
-
/* @__PURE__ */
|
|
673
|
+
return /* @__PURE__ */ jsxs15("section", { className: styles15.section, "aria-labelledby": "takuhon-publications-heading", children: [
|
|
674
|
+
/* @__PURE__ */ jsx15("h2", { id: "takuhon-publications-heading", className: styles15.heading, children: getUILabel("section.publications", locale) }),
|
|
675
|
+
/* @__PURE__ */ jsx15("ul", { className: styles15.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs15("li", { className: styles15.item, children: [
|
|
676
|
+
/* @__PURE__ */ jsx15("p", { className: styles15.title, children: entry.url ? /* @__PURE__ */ jsx15(
|
|
656
677
|
"a",
|
|
657
678
|
{
|
|
658
|
-
className:
|
|
679
|
+
className: styles15.link,
|
|
659
680
|
href: entry.url,
|
|
660
681
|
target: "_blank",
|
|
661
682
|
rel: "noopener noreferrer",
|
|
662
683
|
children: entry.title
|
|
663
684
|
}
|
|
664
685
|
) : entry.title }),
|
|
665
|
-
entry.publisher ? /* @__PURE__ */
|
|
666
|
-
/* @__PURE__ */
|
|
667
|
-
entry.coAuthors && entry.coAuthors.length > 0 ? /* @__PURE__ */
|
|
686
|
+
entry.publisher ? /* @__PURE__ */ jsx15("p", { className: styles15.publisher, children: entry.publisher }) : null,
|
|
687
|
+
/* @__PURE__ */ jsx15("p", { className: styles15.date, children: /* @__PURE__ */ jsx15("time", { dateTime: entry.date, children: formatYearMonth(entry.date, locale) }) }),
|
|
688
|
+
entry.coAuthors && entry.coAuthors.length > 0 ? /* @__PURE__ */ jsx15("p", { className: styles15.coAuthors, children: `${getUILabel("publication.coAuthorsPrefix", locale)}${entry.coAuthors.join(", ")}` }) : null,
|
|
668
689
|
entry.doi ? (() => {
|
|
669
690
|
const bare = normalizeDoi(entry.doi);
|
|
670
|
-
return /* @__PURE__ */
|
|
691
|
+
return /* @__PURE__ */ jsx15("p", { className: styles15.doi, children: /* @__PURE__ */ jsx15(
|
|
671
692
|
"a",
|
|
672
693
|
{
|
|
673
|
-
className:
|
|
694
|
+
className: styles15.link,
|
|
674
695
|
href: `https://doi.org/${bare}`,
|
|
675
696
|
target: "_blank",
|
|
676
697
|
rel: "noopener noreferrer",
|
|
@@ -678,14 +699,14 @@ function Publications({
|
|
|
678
699
|
}
|
|
679
700
|
) });
|
|
680
701
|
})() : null,
|
|
681
|
-
entry.description ? /* @__PURE__ */
|
|
702
|
+
entry.description ? /* @__PURE__ */ jsx15("p", { className: styles15.description, children: entry.description }) : null
|
|
682
703
|
] }, entry.id)) })
|
|
683
704
|
] });
|
|
684
705
|
}
|
|
685
706
|
|
|
686
707
|
// src/components/Recommendations.tsx
|
|
687
|
-
import
|
|
688
|
-
import { jsx as
|
|
708
|
+
import styles16 from "./Recommendations.module-HQSBHXLM.module.css";
|
|
709
|
+
import { jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
689
710
|
function sortRecommendations(entries) {
|
|
690
711
|
return [...entries].sort((a, b) => {
|
|
691
712
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -700,32 +721,32 @@ function Recommendations({
|
|
|
700
721
|
}) {
|
|
701
722
|
if (recommendations.length === 0) return null;
|
|
702
723
|
const ordered = sortRecommendations(recommendations);
|
|
703
|
-
return /* @__PURE__ */
|
|
704
|
-
/* @__PURE__ */
|
|
705
|
-
/* @__PURE__ */
|
|
706
|
-
/* @__PURE__ */
|
|
707
|
-
/* @__PURE__ */
|
|
708
|
-
/* @__PURE__ */
|
|
724
|
+
return /* @__PURE__ */ jsxs16("section", { className: styles16.section, "aria-labelledby": "takuhon-recommendations-heading", children: [
|
|
725
|
+
/* @__PURE__ */ jsx16("h2", { id: "takuhon-recommendations-heading", className: styles16.heading, children: getUILabel("section.recommendations", locale) }),
|
|
726
|
+
/* @__PURE__ */ jsx16("ul", { className: styles16.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs16("li", { className: styles16.item, children: [
|
|
727
|
+
/* @__PURE__ */ jsx16("blockquote", { className: styles16.body, children: /* @__PURE__ */ jsx16("p", { className: styles16.quote, children: entry.body }) }),
|
|
728
|
+
/* @__PURE__ */ jsxs16("p", { className: styles16.attribution, children: [
|
|
729
|
+
/* @__PURE__ */ jsx16("span", { className: styles16.author, children: entry.author.url ? /* @__PURE__ */ jsx16(
|
|
709
730
|
"a",
|
|
710
731
|
{
|
|
711
|
-
className:
|
|
732
|
+
className: styles16.link,
|
|
712
733
|
href: entry.author.url,
|
|
713
734
|
target: "_blank",
|
|
714
735
|
rel: "noopener noreferrer",
|
|
715
736
|
children: entry.author.name
|
|
716
737
|
}
|
|
717
738
|
) : entry.author.name }),
|
|
718
|
-
entry.author.headline ? /* @__PURE__ */
|
|
739
|
+
entry.author.headline ? /* @__PURE__ */ jsx16("span", { className: styles16.headline, children: entry.author.headline }) : null
|
|
719
740
|
] }),
|
|
720
|
-
entry.relationship ? /* @__PURE__ */
|
|
721
|
-
entry.date ? /* @__PURE__ */
|
|
741
|
+
entry.relationship ? /* @__PURE__ */ jsx16("p", { className: styles16.meta, children: entry.relationship }) : null,
|
|
742
|
+
entry.date ? /* @__PURE__ */ jsx16("p", { className: styles16.meta, children: /* @__PURE__ */ jsx16("time", { dateTime: entry.date, children: formatYearMonth(entry.date, locale) }) }) : null
|
|
722
743
|
] }, entry.id)) })
|
|
723
744
|
] });
|
|
724
745
|
}
|
|
725
746
|
|
|
726
747
|
// src/components/SkillsList.tsx
|
|
727
|
-
import
|
|
728
|
-
import { jsx as
|
|
748
|
+
import styles17 from "./SkillsList.module-XIAWE55H.module.css";
|
|
749
|
+
import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
729
750
|
var UNCATEGORIZED = "other";
|
|
730
751
|
function groupSkills(skills) {
|
|
731
752
|
const sorted = [...skills].sort((a, b) => {
|
|
@@ -748,18 +769,18 @@ function groupSkills(skills) {
|
|
|
748
769
|
function SkillsList({ skills, locale = "en" }) {
|
|
749
770
|
if (skills.length === 0) return null;
|
|
750
771
|
const groups = groupSkills(skills);
|
|
751
|
-
return /* @__PURE__ */
|
|
752
|
-
/* @__PURE__ */
|
|
753
|
-
/* @__PURE__ */
|
|
772
|
+
return /* @__PURE__ */ jsxs17("section", { className: styles17.section, "aria-labelledby": "takuhon-skills-heading", children: [
|
|
773
|
+
/* @__PURE__ */ jsx17("h2", { id: "takuhon-skills-heading", className: styles17.heading, children: getUILabel("section.skills", locale) }),
|
|
774
|
+
/* @__PURE__ */ jsx17("div", { className: styles17.groups, children: groups.map((group) => {
|
|
754
775
|
const categoryLabel = group.category === UNCATEGORIZED ? getUILabel("skills.uncategorized", locale) : group.category;
|
|
755
|
-
return /* @__PURE__ */
|
|
756
|
-
/* @__PURE__ */
|
|
757
|
-
/* @__PURE__ */
|
|
776
|
+
return /* @__PURE__ */ jsxs17("div", { className: styles17.group, children: [
|
|
777
|
+
/* @__PURE__ */ jsx17("h3", { className: styles17.category, children: categoryLabel }),
|
|
778
|
+
/* @__PURE__ */ jsx17(
|
|
758
779
|
"ul",
|
|
759
780
|
{
|
|
760
|
-
className:
|
|
781
|
+
className: styles17.list,
|
|
761
782
|
"aria-label": `${categoryLabel} ${getUILabel("a11y.skillsSuffix", locale)}`,
|
|
762
|
-
children: group.skills.map((skill) => /* @__PURE__ */
|
|
783
|
+
children: group.skills.map((skill) => /* @__PURE__ */ jsx17("li", { className: styles17.item, children: skill.label }, skill.id))
|
|
763
784
|
}
|
|
764
785
|
)
|
|
765
786
|
] }, group.category);
|
|
@@ -768,11 +789,11 @@ function SkillsList({ skills, locale = "en" }) {
|
|
|
768
789
|
}
|
|
769
790
|
|
|
770
791
|
// src/components/TakuhonProfile.tsx
|
|
771
|
-
import
|
|
792
|
+
import styles20 from "./TakuhonProfile.module-QUEORIHA.module.css";
|
|
772
793
|
|
|
773
794
|
// src/components/TestScores.tsx
|
|
774
|
-
import
|
|
775
|
-
import { jsx as
|
|
795
|
+
import styles18 from "./TestScores.module-PG7VGFS6.module.css";
|
|
796
|
+
import { jsx as jsx18, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
776
797
|
function sortTestScores(entries) {
|
|
777
798
|
return [...entries].sort((a, b) => {
|
|
778
799
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -787,32 +808,32 @@ function TestScores({
|
|
|
787
808
|
}) {
|
|
788
809
|
if (testScores.length === 0) return null;
|
|
789
810
|
const ordered = sortTestScores(testScores);
|
|
790
|
-
return /* @__PURE__ */
|
|
791
|
-
/* @__PURE__ */
|
|
792
|
-
/* @__PURE__ */
|
|
793
|
-
/* @__PURE__ */
|
|
811
|
+
return /* @__PURE__ */ jsxs18("section", { className: styles18.section, "aria-labelledby": "takuhon-test-scores-heading", children: [
|
|
812
|
+
/* @__PURE__ */ jsx18("h2", { id: "takuhon-test-scores-heading", className: styles18.heading, children: getUILabel("section.testScores", locale) }),
|
|
813
|
+
/* @__PURE__ */ jsx18("ul", { className: styles18.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs18("li", { className: styles18.item, children: [
|
|
814
|
+
/* @__PURE__ */ jsx18("p", { className: styles18.title, children: entry.url ? /* @__PURE__ */ jsx18(
|
|
794
815
|
"a",
|
|
795
816
|
{
|
|
796
|
-
className:
|
|
817
|
+
className: styles18.link,
|
|
797
818
|
href: entry.url,
|
|
798
819
|
target: "_blank",
|
|
799
820
|
rel: "noopener noreferrer",
|
|
800
821
|
children: entry.title
|
|
801
822
|
}
|
|
802
823
|
) : entry.title }),
|
|
803
|
-
/* @__PURE__ */
|
|
804
|
-
/* @__PURE__ */
|
|
824
|
+
/* @__PURE__ */ jsxs18("p", { className: styles18.meta, children: [
|
|
825
|
+
/* @__PURE__ */ jsx18("span", { className: styles18.score, children: entry.score }),
|
|
805
826
|
" \xB7 ",
|
|
806
|
-
/* @__PURE__ */
|
|
827
|
+
/* @__PURE__ */ jsx18("time", { dateTime: entry.date, children: formatYearMonth(entry.date, locale) })
|
|
807
828
|
] }),
|
|
808
|
-
entry.description ? /* @__PURE__ */
|
|
829
|
+
entry.description ? /* @__PURE__ */ jsx18("p", { className: styles18.description, children: entry.description }) : null
|
|
809
830
|
] }, entry.id)) })
|
|
810
831
|
] });
|
|
811
832
|
}
|
|
812
833
|
|
|
813
834
|
// src/components/Volunteering.tsx
|
|
814
|
-
import
|
|
815
|
-
import { jsx as
|
|
835
|
+
import styles19 from "./Volunteering.module-TDRC6QVK.module.css";
|
|
836
|
+
import { jsx as jsx19, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
816
837
|
function sortVolunteering(entries) {
|
|
817
838
|
return [...entries].sort((a, b) => {
|
|
818
839
|
const aOrder = a.order ?? Number.POSITIVE_INFINITY;
|
|
@@ -830,69 +851,71 @@ function Volunteering({
|
|
|
830
851
|
}) {
|
|
831
852
|
if (volunteering.length === 0) return null;
|
|
832
853
|
const ordered = sortVolunteering(volunteering);
|
|
833
|
-
return /* @__PURE__ */
|
|
834
|
-
/* @__PURE__ */
|
|
835
|
-
/* @__PURE__ */
|
|
836
|
-
/* @__PURE__ */
|
|
837
|
-
/* @__PURE__ */
|
|
838
|
-
/* @__PURE__ */
|
|
854
|
+
return /* @__PURE__ */ jsxs19("section", { className: styles19.section, "aria-labelledby": "takuhon-volunteering-heading", children: [
|
|
855
|
+
/* @__PURE__ */ jsx19("h2", { id: "takuhon-volunteering-heading", className: styles19.heading, children: getUILabel("section.volunteering", locale) }),
|
|
856
|
+
/* @__PURE__ */ jsx19("ol", { className: styles19.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs19("li", { className: styles19.item, children: [
|
|
857
|
+
/* @__PURE__ */ jsx19("div", { className: styles19.timelineMarker, "aria-hidden": "true" }),
|
|
858
|
+
/* @__PURE__ */ jsxs19("div", { className: styles19.content, children: [
|
|
859
|
+
/* @__PURE__ */ jsx19("p", { className: styles19.organization, children: entry.url ? /* @__PURE__ */ jsx19(
|
|
839
860
|
"a",
|
|
840
861
|
{
|
|
841
|
-
className:
|
|
862
|
+
className: styles19.link,
|
|
842
863
|
href: entry.url,
|
|
843
864
|
target: "_blank",
|
|
844
865
|
rel: "noopener noreferrer",
|
|
845
866
|
children: entry.organization
|
|
846
867
|
}
|
|
847
868
|
) : entry.organization }),
|
|
848
|
-
/* @__PURE__ */
|
|
869
|
+
/* @__PURE__ */ jsxs19("p", { className: styles19.role, children: [
|
|
849
870
|
entry.role,
|
|
850
|
-
entry.cause ? /* @__PURE__ */
|
|
851
|
-
/* @__PURE__ */
|
|
871
|
+
entry.cause ? /* @__PURE__ */ jsxs19("span", { className: styles19.cause, children: [
|
|
872
|
+
/* @__PURE__ */ jsx19("span", { className: styles19.srOnly, children: getUILabel("a11y.causePrefix", locale) }),
|
|
852
873
|
entry.cause
|
|
853
874
|
] }) : null
|
|
854
875
|
] }),
|
|
855
|
-
/* @__PURE__ */
|
|
856
|
-
/* @__PURE__ */
|
|
876
|
+
/* @__PURE__ */ jsxs19("p", { className: styles19.range, children: [
|
|
877
|
+
/* @__PURE__ */ jsx19("time", { dateTime: entry.startDate, children: formatYearMonth(entry.startDate, locale) }),
|
|
857
878
|
" \u2013 ",
|
|
858
|
-
isOngoing4(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */
|
|
879
|
+
isOngoing4(entry) ? getUILabel("timeline.present", locale) : /* @__PURE__ */ jsx19("time", { dateTime: entry.endDate, children: formatYearMonth(entry.endDate, locale) })
|
|
859
880
|
] }),
|
|
860
|
-
entry.description ? /* @__PURE__ */
|
|
881
|
+
entry.description ? /* @__PURE__ */ jsx19("p", { className: styles19.description, children: entry.description }) : null
|
|
861
882
|
] })
|
|
862
883
|
] }, entry.id)) })
|
|
863
884
|
] });
|
|
864
885
|
}
|
|
865
886
|
|
|
866
887
|
// src/components/TakuhonProfile.tsx
|
|
867
|
-
import { jsx as
|
|
868
|
-
function TakuhonProfile({ data }) {
|
|
888
|
+
import { jsx as jsx20, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
889
|
+
function TakuhonProfile({ data, activitySnapshot }) {
|
|
869
890
|
const showFooter = data.settings.showPoweredBy !== false;
|
|
870
891
|
const locale = data.resolvedLocale;
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
/* @__PURE__ */
|
|
874
|
-
/* @__PURE__ */
|
|
875
|
-
/* @__PURE__ */
|
|
876
|
-
/* @__PURE__ */
|
|
877
|
-
/* @__PURE__ */
|
|
878
|
-
/* @__PURE__ */
|
|
879
|
-
/* @__PURE__ */
|
|
880
|
-
/* @__PURE__ */
|
|
881
|
-
/* @__PURE__ */
|
|
882
|
-
/* @__PURE__ */
|
|
883
|
-
/* @__PURE__ */
|
|
884
|
-
/* @__PURE__ */
|
|
885
|
-
/* @__PURE__ */
|
|
886
|
-
/* @__PURE__ */
|
|
887
|
-
/* @__PURE__ */
|
|
888
|
-
/* @__PURE__ */
|
|
889
|
-
|
|
892
|
+
const activity = data.settings.activity?.enabled === true ? activitySnapshot : void 0;
|
|
893
|
+
return /* @__PURE__ */ jsxs20("article", { className: styles20.root, children: [
|
|
894
|
+
/* @__PURE__ */ jsx20(ProfileHeader, { profile: data.profile }),
|
|
895
|
+
/* @__PURE__ */ jsx20(LinksList, { links: data.links, locale }),
|
|
896
|
+
/* @__PURE__ */ jsx20(EducationTimeline, { education: data.education, locale }),
|
|
897
|
+
/* @__PURE__ */ jsx20(Courses, { courses: data.courses, locale }),
|
|
898
|
+
/* @__PURE__ */ jsx20(CareerTimeline, { careers: data.careers, locale }),
|
|
899
|
+
/* @__PURE__ */ jsx20(Memberships, { memberships: data.memberships, locale }),
|
|
900
|
+
/* @__PURE__ */ jsx20(Certifications, { certifications: data.certifications, locale }),
|
|
901
|
+
/* @__PURE__ */ jsx20(Patents, { patents: data.patents, locale }),
|
|
902
|
+
/* @__PURE__ */ jsx20(ProjectsList, { projects: data.projects, locale }),
|
|
903
|
+
/* @__PURE__ */ jsx20(Publications, { publications: data.publications, locale }),
|
|
904
|
+
/* @__PURE__ */ jsx20(HonorsList, { honors: data.honors, locale }),
|
|
905
|
+
/* @__PURE__ */ jsx20(Recommendations, { recommendations: data.recommendations, locale }),
|
|
906
|
+
/* @__PURE__ */ jsx20(Volunteering, { volunteering: data.volunteering, locale }),
|
|
907
|
+
/* @__PURE__ */ jsx20(SkillsList, { skills: data.skills, locale }),
|
|
908
|
+
/* @__PURE__ */ jsx20(ActivitySection, { snapshot: activity, locale }),
|
|
909
|
+
/* @__PURE__ */ jsx20(Languages, { languages: data.languages, locale }),
|
|
910
|
+
/* @__PURE__ */ jsx20(TestScores, { testScores: data.testScores, locale }),
|
|
911
|
+
/* @__PURE__ */ jsx20(ContactInfo, { contact: data.contact, locale }),
|
|
912
|
+
showFooter ? /* @__PURE__ */ jsx20(Footer, {}) : null
|
|
890
913
|
] });
|
|
891
914
|
}
|
|
892
915
|
|
|
893
916
|
// src/components/LocaleSwitcher.tsx
|
|
894
|
-
import
|
|
895
|
-
import { jsx as
|
|
917
|
+
import styles21 from "./LocaleSwitcher.module-QVLPVGLG.module.css";
|
|
918
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
896
919
|
function LocaleSwitcher({
|
|
897
920
|
availableLocales,
|
|
898
921
|
currentLocale,
|
|
@@ -902,16 +925,16 @@ function LocaleSwitcher({
|
|
|
902
925
|
}) {
|
|
903
926
|
const label = ariaLabel ?? getUILabel("a11y.selectLanguage", currentLocale);
|
|
904
927
|
const format = formatLocale ?? ((locale) => locale);
|
|
905
|
-
return /* @__PURE__ */
|
|
928
|
+
return /* @__PURE__ */ jsx21("div", { className: styles21.wrapper, children: /* @__PURE__ */ jsx21(
|
|
906
929
|
"select",
|
|
907
930
|
{
|
|
908
|
-
className:
|
|
931
|
+
className: styles21.select,
|
|
909
932
|
"aria-label": label,
|
|
910
933
|
value: currentLocale,
|
|
911
934
|
onChange: (event) => {
|
|
912
935
|
onSelect(event.target.value);
|
|
913
936
|
},
|
|
914
|
-
children: availableLocales.map((locale) => /* @__PURE__ */
|
|
937
|
+
children: availableLocales.map((locale) => /* @__PURE__ */ jsx21("option", { value: locale, children: format(locale) }, locale))
|
|
915
938
|
}
|
|
916
939
|
) });
|
|
917
940
|
}
|
|
@@ -919,7 +942,7 @@ function LocaleSwitcher({
|
|
|
919
942
|
// src/components/TakuhonHead.tsx
|
|
920
943
|
import { generateJsonLd } from "@takuhon/core";
|
|
921
944
|
import { useEffect } from "react";
|
|
922
|
-
import { Fragment as Fragment4, jsx as
|
|
945
|
+
import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
923
946
|
function primarySubtag(tag) {
|
|
924
947
|
const dash = tag.indexOf("-");
|
|
925
948
|
return (dash === -1 ? tag : tag.slice(0, dash)).toLowerCase();
|
|
@@ -1004,23 +1027,24 @@ function TakuhonHead({ data, siteUrl, pageUrl }) {
|
|
|
1004
1027
|
script.remove();
|
|
1005
1028
|
};
|
|
1006
1029
|
}, [jsonLdPayload]);
|
|
1007
|
-
return /* @__PURE__ */
|
|
1008
|
-
/* @__PURE__ */
|
|
1009
|
-
description ? /* @__PURE__ */
|
|
1010
|
-
canonical ? /* @__PURE__ */
|
|
1011
|
-
/* @__PURE__ */
|
|
1012
|
-
ogDescription ? /* @__PURE__ */
|
|
1013
|
-
canonical ? /* @__PURE__ */
|
|
1014
|
-
ogImage ? /* @__PURE__ */
|
|
1015
|
-
/* @__PURE__ */
|
|
1016
|
-
/* @__PURE__ */
|
|
1017
|
-
ogAlternates.map((loc) => /* @__PURE__ */
|
|
1018
|
-
/* @__PURE__ */
|
|
1019
|
-
alternates.map(({ locale, href }) => /* @__PURE__ */
|
|
1020
|
-
xDefaultHref ? /* @__PURE__ */
|
|
1030
|
+
return /* @__PURE__ */ jsxs21(Fragment4, { children: [
|
|
1031
|
+
/* @__PURE__ */ jsx22("title", { children: profile.displayName }),
|
|
1032
|
+
description ? /* @__PURE__ */ jsx22("meta", { name: "description", content: description }) : null,
|
|
1033
|
+
canonical ? /* @__PURE__ */ jsx22("link", { rel: "canonical", href: canonical }) : null,
|
|
1034
|
+
/* @__PURE__ */ jsx22("meta", { property: "og:title", content: profile.displayName }),
|
|
1035
|
+
ogDescription ? /* @__PURE__ */ jsx22("meta", { property: "og:description", content: ogDescription }) : null,
|
|
1036
|
+
canonical ? /* @__PURE__ */ jsx22("meta", { property: "og:url", content: canonical }) : null,
|
|
1037
|
+
ogImage ? /* @__PURE__ */ jsx22("meta", { property: "og:image", content: ogImage }) : null,
|
|
1038
|
+
/* @__PURE__ */ jsx22("meta", { property: "og:type", content: "profile" }),
|
|
1039
|
+
/* @__PURE__ */ jsx22("meta", { property: "og:locale", content: resolvedLocale }),
|
|
1040
|
+
ogAlternates.map((loc) => /* @__PURE__ */ jsx22("meta", { property: "og:locale:alternate", content: loc }, loc)),
|
|
1041
|
+
/* @__PURE__ */ jsx22("meta", { name: "twitter:card", content: twitterCard }),
|
|
1042
|
+
alternates.map(({ locale, href }) => /* @__PURE__ */ jsx22("link", { rel: "alternate", hrefLang: locale, href }, locale)),
|
|
1043
|
+
xDefaultHref ? /* @__PURE__ */ jsx22("link", { rel: "alternate", hrefLang: "x-default", href: xDefaultHref }) : null
|
|
1021
1044
|
] });
|
|
1022
1045
|
}
|
|
1023
1046
|
export {
|
|
1047
|
+
ActivitySection,
|
|
1024
1048
|
CareerTimeline,
|
|
1025
1049
|
Certifications,
|
|
1026
1050
|
ContactInfo,
|